2

文字列がそれ自体で存在する場合、つまり別の単語内に存在しない場合(ただし、特殊文字で囲まれていても問題ありません)、テキスト内で文字列を検索できる正規表現を作成しようとしています。

/\bword\b/i

上記の正規表現は正常に機能し、テキスト内に「単語」が含まれています。問題は、私が見つけたい単語が「c++」のようなものである場合に発生します。この場合、それ自体が「c」文字の出現に一致します。「+」文字をエスケープしようとしましたが、違いはありません。「+」は単語以外の文字であるため、間違ったルートをたどっていると思います。単語の境界を使用することは、私がすべきことではありません。

したがって、問題は、正規表現を使用して、文字列が英数字であるか特殊文字を含むかに関係なく、それ自体でテキスト内の文字列を検索するにはどうすればよいかということです。したがって、次のテキストでは、「c++」の3つのオカレンスと一致する必要があります。

c++
(c++)
perl/c++/assembly

ただし、次の点では一致しないはずです。

maniac++
c++abc

これは、私のスクリプトがユーザーの履歴書/履歴書に特定のスキルが存在するかどうかを判断できるようにすることを目的としています。これをPHPのpreg_match_all()関数で使用しています。

私は多くの検索を行いましたが、解決策を思い付くことができません。うまくいけば、正規表現の知識が豊富な人が助けてくれるでしょう。

4

1 に答える 1

2

これを試して:

/(?<!\w)(c\+\+)(?!\w)/

これ(?<!\w)は否定的な後読み句です。つまり、単語の文字がパターンの直前にあるべきではありません。この(?!\w)部分は否定的な先読みです。つまり、単語の文字がすぐに続くべきではありません。

お役に立てれば!

于 2013-01-30T01:55:10.457 に答える