11

正規表現を使用してすべての単語に一致するが、一意の単語に1回だけ一致することは可能ですか?これを行う方法は他にもあることは承知していますが、正規表現を使用してこれが可能かどうかを知りたいと思っています。

たとえば、私は現在次の式を持っています:

(\w+\b)(?!.*\1)

および次の文字列:

glass shoes door window door glasses. window glasses

ほとんどの場合、式は機能し、次の単語と一致します。

shoes
door 
window
glasses

これには2つの問題があります。

  1. 「glasses」と「glass」で部分文字列の一致が行われていますが、これは正しくありません。

  2. 「メガネ」と「メガネ」。一致する必要がありますが、現在は一致しません。

最終的な一致は次のようになります。

shoes 
door 
window 
glasses 
glass 
4

3 に答える 3

10

かなり近い、\bネガティブな先読みで読んだ

/(\w+\b)(?!.*\1\b)/

Rubularでご覧ください

于 2012-12-27T21:27:18.453 に答える
3

複数行のテキストで個別の単語を検索する[\s\S]には、代わりにを使用します.

(\b\w+\b)(?![\s\S]*\b\1\b)
于 2018-10-17T08:58:19.523 に答える
2

mačekの答えとまったく同じですが、後方参照の前に追加の\ bがあります。それ以外の場合は、

glass shoes door window door glasses. window glasses sunglasses

サングラスという言葉に見られるように、メガネの試合を見逃すでしょう。

/(\w+\b)(?!.*\b\1\b)/

于 2015-04-22T11:15:19.863 に答える