0

我正在尝试使用正则表达式解析字符串。我需要在 clean 之前获得第一部分&。清洁&没有+权利在它之前或之后。

干净的 &:

  • 47&78
  • a+bc&gsd+f

不干净 &:

  • fA+&71
  • 午睡&+系统

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

我试过这样做,但它不起作用:

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

谢谢。

4

2 回答 2

3

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

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

但这需要在 . 之前至少有一个字符&。更好地使用(负面)回顾:

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

阅读更多关于Regex Lookaround的内容。

如果您&从不在字符串的开头或结尾,您也可以只使用否定字符类:

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

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

^(?:.*[^+])?&(?:[^+].*)?$
于 2012-07-27T09:51:02.507 回答
1

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

于 2012-07-27T09:51:23.480 回答