Regex 正则表达式,以匹配除带有周围前缀的字符串以外的任何字符
我正在尝试创建一个正则表达式,它将验证输入以匹配任何字符,但它应该排除由前缀包围的输入(即{}..}、{@..}或{$..}) 举个例子:Regex 正则表达式,以匹配除带有周围前缀的字符串以外的任何字符,regex,regex-lookarounds,Regex,Regex Lookarounds,我正在尝试创建一个正则表达式,它将验证输入以匹配任何字符,但它应该排除由前缀包围的输入(即{}..}、{@..}或{$..}) 举个例子: Free text which is fine // should return true {#some other text#} // should return false Text with numbers 671 // should return true {@Hello world@} // should return false {$Hello
Free text which is fine // should return true
{#some other text#} // should return false
Text with numbers 671 // should return true
{@Hello world@} // should return false
{$Hello Mars$} // should return false
{$some text which i do not close // should return true
这应该可以通过使用负面环视来实现,大致如下:
^(\?!=(\{@[^.]+@\}))(\?!=(\{$[^.]+$\}))(\?!=(\{#[^.]+#\})).*
任何帮助都将不胜感激:)如果你问我,你的语法有点奇怪。。。我建议:
^(?!\{(?:[$@#]).*(?:[$@#])\}).*
第一个“组”是“代码> {(::[ $@α])<代码>,它查找开头前缀,然后<代码> >代码>以匹配中间的所有内容和<代码>(?:[ $(@)] ] /<代码>以匹配结束后缀。
请注意,它不允许出现以下情况:{$Hello Mars$} how are you?
如果您希望它也接受这一点,请添加线端锚点:
^(?!\{(?:[$@#]).*(?:[$@#])\}$).*
^
您可以使用character类来使用不同的符号[@$#]
,并且比在侧边使用多个负环视框或
运算符短:)
编辑:要防止出现类似{#免费文本,这很好$}
的情况,您可以使用:
^(?!\{([$@#]).*\1\}).*
或
第二个版本
\1
是一个反向引用,指的是第一个捕获的组(任何一个$
,@
,或#
)。感谢您的回答和解释,现在一切都有意义了;不要使用多个负lookaround或|运算符,这在使用上要简单得多!几乎但不正确,“{#免费文本,这很好$}”,这将被视为排序文本…@TomerW很好。我编辑了我的答案来提供这个案例。现在它是完整的和惊人的:)那{{那是什么文本?$}
那是封闭的还是自由的文本?这是自由的文本,我只寻找用{#…}、{@…}或{$$}封闭的文本
^(?!\{([$@#]).*\1\}$).*