1

すべて

.txtファイルから文字を読み取り、検索境界を(1文字のスペースのみ)「2から9までの数字またはe以外の小文字」を読み取るように設定したい場合、次の2つの正規表現のいずれかになります。正しい方法でしょうか?

I. "[/w[2-9][a-z&&[^e]]]"  

II. "[[2-9][a-z&&[^e]]]"

私は2番目のものに傾いていますが、同じ位置で数字と文字の両方を同時に検索する方法を示すjava.util.regex.Patternの説明には何も見つかりませんでした。どんな助けでも素晴らしいでしょう。ありがとうございました!^^

4

3 に答える 3

1

あなたは書くでしょう:

[2-9a-df-z]

a-z明示的な「not 」で本当に書きたい場合は、次のようにe書くことができます。

(?!e)[2-9a-z]

しかし、それはこの目的にはやり過ぎだと思います。

于 2012-09-23T23:16:55.940 に答える
1

試してみてください[2-9a-df-z]2これは、からの数字9、およびを除くすべての小文字e、つまり、からadおよびからに一致fzます。

于 2012-09-23T23:16:56.167 に答える
1

2番目の正規表現は正しいですが、これらすべての角かっこは必要ありません。これは行います:

"[2-9a-z&&[^e]]"

(?!e)[2-9a-z]これは、各位置で2つのテストを実行する必要がある@ruakhの提案よりもはるかに効率的です。これはまさに、Java開発者が交差演算子を使用して解決しようとしていた問題&&です。ユニコードコンソーシアムはそれ以来、他の集合演算とともにこのアイデアを承認しています。

その最初の正規表現で何をしようとしていたのかわかりませんが、/wは両方ともリテラル文字として扱われるため、と同等に[2-9a-df-z/]なります。これは、希望どおりに聞こえません。


編集:誤解しないでください。効率だけがこのアプローチを好む理由ではありません。それは最も重要なものでさえありません。時期尚早の最適化は、他の場所と同じように正規表現でも悪です。正規表現をできるだけシンプルかつ明確に保つことに集中してください。パフォーマンスについて心配する必要はありません。私の正規表現は、先読みバージョンよりも単純(1種類の操作のみを実行するという点で)であり、明確(読みやすい)です(ただし、それほど多くはありません。その&&構文はまだ私には恐ろしいように見えます)。

于 2012-09-24T03:29:52.323 に答える