我确信这很简单,但我需要找到&
字符的单次出现,而不是&&
的任何实例。
对正则表达式所做的任何解释都会非常有帮助。
答案 0 :(得分:3)
你可以做到
([^&]|^)&([^&]|$)
或者对我来说更美观的使用外观
(?<=[^&]|^)&(?=[^&]|$)
你必须检查字符串之前或之前没有&
,并且前面没有&
或字符串的结尾。
[^&]
是一个否定的字符类,意味着匹配除&
[^&]|^
匹配非&
字符或字符串的开头(^
)
[^&]|$
匹配非&
字符或字符串末尾($
)
(?<=pattern)
查看断言,确保pattern
在
(?=pattern)
向前看断言,确保pattern
跟随
我的第一个解决方案和第二个解决方案之间的区别在于,第一个解决方案与之前和之后的字符匹配,第二个解决方案使用环绕声是零宽度断言,这意味着它们与字符不匹配,它们只是检查我们在那里。
答案 1 :(得分:3)
您没有指定风味,但如果它支持lookbehinds,您可以使用:
(?<!&)&(?!&)
尽管外观神秘,但模式非常简单:
(?<!&)
- 在符号后检查当前位置不 ... &
- ...匹配&符号...... (?!&)
- ...并检查它不是符号之前。答案 2 :(得分:1)
[^&]&[^&]
某些东西,不是&amp;,后面是&amp;,后跟其他东西。
如果你的表达式可以在行/ input / expression / string的开头或结尾,那么还有两种可能性:
^&[^&]
[^&]&$
现在您可以将它们与OR结合使用。
答案 3 :(得分:1)
您需要查找&
左侧和右侧不是&
或者没有任何内容的内容。
所以表达式将是:
([^&]|^)&([^&]|$)
第一组匹配不是&
或行首的字符。然后是字符&
,第二组匹配不是&
或行尾的字符。