現在、Javaで正規表現を学習していますが、単語の境界について質問があります。したがって、Java正規表現で単語の境界を探すと、単語以外の文字で囲まれた単語を受け入れる\ bが得られたため、この正規表現
\b123\b
はこの文字列を受け入れます123 456
が、拒否し456123456
ます。!$@#@%123^^%$#
今、私はその単語のような条件が"123"
上記の正規表現によって受け入れられていることを発見しました。上記の例のように、英数字以外(スペースを除く)で囲まれた単語を拒否する単語の境界/パターンはありますか?
質問する
340 次
2 に答える
1
\s
の代わりに使用したい\b
。これにより、単語の境界ではなく空白文字が検索されます。
ただし、最初の例を一致させたい場合は123 456
、アンカーを使用し123
て、文字列のすぐ開始または終了で受け入れる必要があります。これは、を介して実行できます(\s|^)123(\s|$)
。カラット^
は弦の始まりと$
一致し、弦の終わりと一致します。
于 2013-03-10T08:06:55.407 に答える
1
(?<!\S)123(?!\S)
(?<!\S)
非空白文字が前にない位置に一致します。(否定後読み)
(?!\S)
非空白文字が続かない位置に一致します。(否定先読み)
これが不当に複雑に見えることはわかっていますが、それ\b
は多くの複雑さが隠されているためです。これは次と同等です:
(?<=\w)(?!\w)|(?=\w)(?<!\w)
...単語の文字が前にあり、その後に単語の文字が続かない位置、または単語の文字が続き、前に単語の文字がない位置を意味します。
于 2013-03-10T08:52:15.223 に答える