2009-07-04 8 views
3

キャリッジリターン(0x0d)、改行(0x0a)、タブレーター(0x09)を除くすべてのUnicode制御文字に一致する正規表現を取得する必要があります。現在のところ、私の正規表現は次のようになります:正規表現で3を除くユニコード制御文字を一致させる

/\p{C}/u 

ここで、これらの3つの例外を定義するだけです。

+0

が、これはPHPのためですか?最高の答えを得るために、使用している正規表現の味を知る必要があります。 Darth Eruの答えはPHPでも動作しますが、他の味は別のアプローチが必要です。 –

+0

ああ、申し訳ありません。はい、PHPが使用するPerl互換の正規表現です。 – Tower

答えて

6

ここでは、文字クラスと組み合わせてネガティブな先読みを使用できます。

/(?![\x{000d}\x{000a}\x{0009}])\p{C}/u 

これは、文字が文字クラスで指定されていないものであることを否定的な先読みで表現します。次に、キャラクターを再び通過して、それを任意の制御文字と一致させます。

単一のユニコードポイントを指定するためにperl構文を使用しました。前後参照

here

より多くの議論が(これはテストされていないことに注意してください、私はコンセプトが正しいことだと思う。)

+0

.NETの 'Regex'は' System.Globalization.UnicodeCategory.Control'にマッチするBlockという名前のIsControlCharacterユニコードを持つだけではありません。手動ですべての制御文字を指定するのではなく、それを使うだけでいいですね。 – Jez

関連する問題