15

i.v.大文字と小文字を区別しない単語に一致させたい

パターンを持っている

(?i)\bi\.v\.

しかし、最後に単語境界が必要な
場合、上記のパターンは
ivxに一致するという点で失敗します

しかし、最後に作業境界を追加しようとすると

(?i)\bi\.v\.\b

\bがリテラルを食べていると思うので、 iv とさえ一致しないという点で失敗します。なので 。単語の区切りは貪欲で
ある必要があります\.


sam iv samとマッチさせたい


sam.iv
ivsam と一致させたくない

これで近づく

(?i)\bi\.v\.\s$

しかし、行末に iv が見つからない

4

3 に答える 3

25

\b英数字と英数字以外の文字 (または文字列の先頭/末尾) の間でのみ一致します。.したがって、ドットの直後に英数字が続く場合を除き、 の後には一致しません。

ドットの後に非空白文字が続かないことを確認することが目的の場合は、否定先読みアサーションを使用して指定できます。

(?i)\bi\.v\.(?!\S)

(?!\S)「次の文字が非空白文字ではないことをアサートする」ことを意味します。

これは少し複雑に聞こえるかもしれません - なぜ二重否定なのですか? (?=\s)「次の文字が空白文字であることをアサートする」という意味ではないのはなぜですか? 微妙な違いがあります。2 番目のバージョンでは空白文字が必要です。これは、正規表現が文字列の末尾で一致しないことを意味します。最初の正規表現は、そのコーナー ケースも処理します。

通常、「単語境界」の概念を「スペースで区切られた」という意味にしたい場合は、最初のものも置き換える必要があり\bます。

(?i)(?<!\S)i\.v\.(?!\S)

または正規表現は、sam.i.v.あなたが望んでいないと思われるものと一致します。

于 2013-08-01T21:59:38.273 に答える
-3

あなたは単語の境界線と貪欲な概念に非常に混乱しているようです。あなたができる最善のことは、これらのアドレスに行くことです:

  • 貪欲な量指定子とは:

http://www.regular-expressions.info/repeat.html

  • 単語境界とは:

http://www.regular-expressions.info/wordboundaries.html

これらの説明を読むと、あなたの問題はばかげていると思うでしょう。

于 2013-08-01T21:40:32.077 に答える