2011-10-23 5 views
1

私は、文字列に#wineなどのハッシュタグをキャッチする正規表現の式#(\w+)を持っており、それはまた、& #039のようなHTMLエンティティにピックアップに起こります;。私はアンパサンドを探してこれらを避けるために必要です。これをどのように検証できますか?これは(やや少ないエレガントが)トリックを行うだろう、それに失敗正規表現のハッシュタグ&HTMLエンティティの重複が整理

(?<!&)#(\w+) 

:あなたの言語の正規表現エンジンがサポートしている場合

答えて

5

は、私は否定的lookbehindアサーションを使用することをお勧め

(?:^|[^&])#(\w+) 
+0

2番目の正規表現は、望ましくないかもしれない 't#wine'にマッチします。 –

+0

確かに。私はOPが何を持っているかを正確には知らない。おそらく、例えば、 'foo bar baz(#wine)' *は一致するはずです。必要に応じて2番目の正規表現を微調整するのは簡単です。 – davidchambers

+0

langはphpですが、これはおかげで、私はいつもdocのおかげで否定的な表情に困っています。 – ThomasReggi

0

することができますこの(?:^|\s)(#\w+)のような正規表現を試して、最初に取得したグループをマッチとして選んでください。

+0

これは良いことではありません。ワード境界は、ワードキャラクタが非ワードキャラクタに続くとき(その逆の場合)に発生します。 "#"は非語の文字なので、先行する文字は単語の文字である必要があります。これは、OPが念頭に置いていることではありません。ブラウザのコンソールで実行できる簡単なテストケースです: '/\b#\w+\b/.test('#foo #bar #baz ')'(スポイラー: 'false'を返します)。 – davidchambers

+0

@davidchambers指摘に感謝します。正規表現を修正しました。私はちょうど何かシンプルなものを試していた。 –