2016-04-26 12 views
0

特定の単語を取得しようとしていますが、文字列 '、'が先行しているとは限りません。試しました文字列の前にカンマとスペースではない正規表現

((?!\,\s))(word) 

しかし、それは動作しません。私はそれが単語「単語」と一致することを期待していました。私は間違って何をしていますか?

+0

あなたは後読みが先読みする必要はありません。正規表現の味は何ですか? – anubhava

+0

xsltでそれをやっていると助けてくれます。 – villeroy

+0

あなたの掲示されたテキストは ''、' 'です。それはスペースでカンマになります。 – sln

答えて

1

先に負の表記をコード化しました。の背後にある負の表情をお試しください:

(?<!,\s)word 

はまた、あなたがコード化されたブラケットのほとんどを必要としないことに注意してください。

0

私は答えがlookbehindアサーションであることに同意します。
違いはどこに置くかです。

アサーションで始まる正規表現は、遅くなります。
アサーションを挿入ポイントに最適化できないためです。

そのため、大きく見えるかもしれませんが、性能に違いがあります
5から20回。

サンプル

word asdfasdf afsdbbasbfasfb 
adbbadfb, afdsbafbdsasfb adb, , , , 
word, word word, word 

ベンチマーク

Regex1: (?<!,\s)word 
Options: <none> 
Completed iterations: 50/50  (x 1000) 
Matches found per iteration: 3 
Elapsed Time: 0.70 s, 703.28 ms, 703277 µs 


Regex2: word(?<!,\sword) 
Options: <none> 
Completed iterations: 50/50  (x 1000) 
Matches found per iteration: 3 
Elapsed Time: 0.17 s, 170.21 ms, 170207 µs 
関連する問題