创建一个接受&的正则表达式但不是+& +

时间:2012-07-27 09:45:23

标签: regex

我正在尝试使用正则表达式解析字符串。我需要在干净&之前获得第一部分。干净的&在其之前或之后没有+

清洁&:

  • 47安培; 78
  • 一个+ BC&安培; GSD + F

不干净&:

  • FA +&安培; 71
  • 绒毛&安培; + SYS

对于Matisse+&+Sadko&sendtemp=1,正则表达式应返回Matisse+&+Sadko

我试过这样做,但我不行:

.*(?!\+)&(?!\+).*

感谢。

2 个答案:

答案 0 :(得分:3)

(?!...)是一个(负)前瞻表达式,它会检查下一个字符是否匹配。因此,您需要将一个字符添加到正则表达式中,因为&绝不是+

(?!\+).&(?!\+)

但是在&之前至少需要一个字符。更好地使用(消极)lookbehind:

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

详细了解Regex Lookaround

如果你的&永远不在字符串的开头或结尾,你也可以只使用一个否定的字符类:

.*[^+]&[^+].*

......或者,如果可以的话,让它是可选的:

^(?:.*[^+])?&(?:[^+].*)?$

答案 1 :(得分:1)

所以,好看,你看看负面的前瞻,但它的任务更多(!)简单 [somesymbols] - 这是正则表达式接受的一组符号 [^somesymbols] - 这是一组符号,正则表达式不接受 所以,只需写下:[^+]&[^+]来过滤你的字符串