正規表現\ p {L}および\ p {N}


106

私は正規表現に不慣れで、次の正規表現が与えられました。

(\p{L}|\p{N}|_|-|\.)*

*の意味を知っています。「または」を意味し、\がエスケープされます。

しかし、私は何を知っていない\p{L}\p{N}意味が。結果を出さずにGoogleで検索しました...

誰かが私を助けてくれますか?


私もそれをググったが、この結果を得た。
MC皇帝

回答:


160

\p{L}カテゴリ「文字」の単一のコードポイントに一致します。
\p{N}任意のスクリプト内の任意の種類の数字と一致します。

出典:regular-expressions.info

正規表現を頻繁に使用する場合は、そのサイトにブックマークを付けることをお勧めします。これは非常に便利です。


速い答えはthx :) しかし、正規表現は10に一致すべきではありませんか?私はオンライン正規表現マッチャーを試しました:regexpal.com
Diemauerdk

@ user1093774:正規表現はサポートしていないと思います\p{}が、一致しているはずです。
Cerbrus 2013

1
この構文は、すべてのインタープリターが認識できるわけではない、最新のUnicode regex実装に固有です。\ p {L}を{a-zA-Z}(ASCII表記)または{\ w}(perl / vim表記)で安全に置き換えることができます。および\ p {N}は{0-9}(ascii)または{\ d}(perl / vim)で作成します。それらすべてに一致させたい場合は、次のようにしてください:{a-zA-Z0-9} +または{\ w \ d} +
Rafael Beckel

16
ラファエルは、私はあなたが安全に置き換えることができることに同意します」いけない\p{L}ことで{a-zA-Z}{a-zA-Z}たとえば、はéフランス語の至る所で使用されるのようなアクセント付き文字には一致しません。したがって、これらは安全に交換できるのは、英語のみを処理し、他には何も処理しないことが確実な場合のみです。
Rolf

コードポイントまたはコード単位と一致しますか?stackoverflow.com/a/27331885/4928642
Qwertiy 2018年

30

これらは、Unicodeプロパティのショートカットです(\p{L}Unicode文字\p{N}用、Unicode数字用)。彼らは、.NET、PerlやJavaの、PCRE、XML、XPathの、JGSoft、ルビー(1.9以上)とPHP(によってサポートされている5.1.0以降

とにかく、それは非常に奇妙な正規表現です。文字クラスで十分な場合は、代替を使用しないでください。

[\p{L}\p{N}_.-]*

xmlでのその正規表現-私は自分で正規表現を実行していません:)
Diemauerdk

括弧のキャプチャが使用されたという事実は別として、REは実際には同じものにコンパイルされます(\p{…}そもそも、エスケープシーケンススタイルをサポートする最適化REエンジンでは)。
ドナルフェロー

XRegExp unicodeプラグインのように見えます。その場合、任意の言語の任意の英数字になります
Tim

おかげで、サポート言語の一覧表示は便利でしたが、そこに制限はありませんでした(ほとんどの正規表現は "ユニバーサル"です)。
HoldOffHunger 2018

@HoldOffHunger:残念ながら遠く離れています。それがRegexBuddyのようなツールの市場がある理由です。regular-expressions.info/refbasic.htmlを見てください。正規表現のフレーバーの微妙な違いとそれほど微妙ではない違いに驚くでしょう...
Tim Pietzcker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.