我正在尝试使用正则表达式解析字符串。我需要在干净&
之前获得第一部分。干净的&
在其之前或之后没有+
。
清洁&:
不干净&:
对于Matisse+&+Sadko&sendtemp=1
,正则表达式应返回Matisse+&+Sadko
。
我试过这样做,但我不行:
.*(?!\+)&(?!\+).*
感谢。
答案 0 :(得分:3)
(?!...)
是一个(负)前瞻表达式,它会检查下一个字符是否匹配。因此,您需要将一个字符添加到正则表达式中,因为&
绝不是+
:
(?!\+).&(?!\+)
但是在&
之前至少需要一个字符。更好地使用(消极)lookbehind:
(?<!\+)&(?!\+)
详细了解Regex Lookaround。
如果你的&
永远不在字符串的开头或结尾,你也可以只使用一个否定的字符类:
.*[^+]&[^+].*
......或者,如果可以的话,让它是可选的:
^(?:.*[^+])?&(?:[^+].*)?$
答案 1 :(得分:1)
所以,好看,你看看负面的前瞻,但它的任务更多(!)简单
[somesymbols]
- 这是正则表达式接受的一组符号
[^somesymbols]
- 这是一组符号,正则表达式不接受
所以,只需写下:[^+]&[^+]
来过滤你的字符串