正则表达式 - 匹配包含这些单词中的1个或2个但不是全部3个的URL

时间:2015-01-29 18:52:35

标签: regex google-analytics

我正在为Google Analytics构建一个正则表达式,我几乎就在那里,但我在最后一部分陷入困境。

我正在尝试匹配网址中的特定字词,无论其顺序如何,但我想排除包含3个特定字词的网址。

以下是4个网址:

/find-store?radius=30&manufacturers=sony,phillips,magnavox&segment=residential&postal=998028#
/find-store?search=Juneau%2C+AK+99802%2C+USA&radius=30&manufacturers=sony,magnavox&segment=commercial&postal=998028#
/find-store?radius=30&manufacturers=phillips,sony&segment=residential&postal=998028#
/find-store?radius=30&manufacturers=magnavox&segment=residential&postal=998028#

我希望我的正则表达式匹配所有上述URL,除了第一个(包含sony,phillips和magnavox)。品牌可以按不同顺序排列,因此无论订单如何,都需要检查这3个字是否存在。

以下是我当前的正则表达式,它匹配所有这些网址:

(find-store.*sony.*magnavox)|(find-store.*sony.*phillips)|(find-store.*sony)

1 个答案:

答案 0 :(得分:5)

这个正则表达式有效。 ^(?!(?=.*sony)(?=.*phillips)(?=.*magnavox)).+$

 ^                          # BOS
 (?!                        # Cannot be all three on the line
      (?= .* sony )
      (?= .* phillips )
      (?= .* magnavox )
 )
 .+ 
 $                          # EOS

对于特定短语^(?!(?=.*sony)(?=.*phillips)(?=.*magnavox)).*find-store.*$

 ^                          # BOS
 (?!                        # Cannot be all three on the line
      (?= .* sony )
      (?= .* phillips )
      (?= .* magnavox )
 )
 .* 
 find-store                 # Add sepcific phrase/words
 .* 
 $                          # EOS

您也可以将特定词组放在顶部

 # ^.*?find-store(?!(?=.*sony)(?=.*phillips)(?=.*magnavox)).+$

 ^                          # BOS
 .*? 
 find-store                 # Add sepcific phrase/words

 (?!                        # Cannot be all three on the line
      (?= .* sony )
      (?= .* phillips )
      (?= .* magnavox )
 )
 .+ 
 $                          # EOS

如果你需要sony,phillips或magnovox,你可以在底部添加它们。

 # ^.*?find-store(?!(?=.*sony)(?=.*phillips)(?=.*magnavox)).*?(sony|phillips|magnavox).*?$

 ^                                  # BOS
 .*? 
 find-store                         # Add required sepcific phrase/words

 (?!                                # Cannot be all three on the line
      (?= .* sony )
      (?= .* phillips )
      (?= .* magnavox )
 )
 .*? 
 ( sony | phillips | magnavox )     # (1), Required. one of these
 .*? 
 $                                  # EOS