1

商品に関する文字列が多数あります。これらにはそれぞれ参照番号があり、異なる参照番号が複数回言及されている場合に取得する正規表現を作成したいと考えています。したがって、次の例が与えられます。

"AB01 MyProduct" >>> No match - because there is only one ID
"AB02 MyOtherProduct" >>> No match - because there is only one ID
"AB03 YetAnotherProduct" >>> No match - because there is only one ID
"AnAccessory for AB01, AB02, AB03 or AB101" >>> Matches!!
"AB02 MyOtherProduct, MyOtherProduct called the AB02" >>> No match - because the codes are the same

誰でも私に手がかりを与えることができますか?

4

1 に答える 1

2

正規表現エンジンが否定的な先読みをサポートしている場合、これでうまくいきます。

(AB\d+).*?(?!\1)AB\d+

一致する 2 つのシーケンスがAB\d+あり、2 番目のシーケンスが最初のシーケンスと同じでない場合に一致します (否定先読みによって保証されます)。

説明:

(           # start capture group 1
 AB         # match `AB` literally
 \d+        # match one or more digits
)           # end capture group one
.*?         # match any sequence of characters, non-greedy
(?!         # start negative lookahead, match this position if it does not match
 \1         # whatever was captured in capture group 1
)           # end lookahead
AB          # match `AB` literally
\d+         # match one or more digits

テスト (JavaScript):

> var pattern = /(AB\d+).*?(?!\1)AB\d+/;
> pattern.test("AB01 MyProduct")
  false
> pattern.test("AnAccessory for AB01, AB02, AB03 or AB101")
  true
> pattern.test("AB02 MyOtherProduct, MyOtherProduct called the AB02")
  false
于 2013-01-10T12:38:38.920 に答える