正则表达式匹配两个 之间的所有内容
Posted
技术标签:
【中文标题】正则表达式匹配两个 之间的所有内容【英文标题】:Regex match everything between two 正则表达式匹配两个 之间的所有内容 【发布时间】:2018-09-02 07:34:27 【问题描述】:我在这里查看了不同的答案,但不幸的是,它们都不适合我的情况。所以我希望你不要介意。
所以我需要匹配两个大括号 之间的所有内容,除非匹配以 @ 开头并且没有这些大括号,例如:
-
“这是一个超级文本 match_this”
“match_this”
“这是另一个例子@deal_with_it”
这是我的测试字符串,1,2,3 是有效的,而最后一个不应该是:
1 eww
2 r23r23fetwe
3 #d2dded
4 @d2dded
我正在尝试:
(?<=[^@]\)[^\]*(?=\)
那么只有第二个和第三个选项是匹配的(没有第一个) https://regex101.com/r/qRInUf/2/
然后我在尝试:
\(.*?)\ or [^@]\(.*?)\
在这两种情况下,我都无法匹配 1,2,3 值 https://regex101.com/r/uYRtLD/1
提前感谢您的任何建议。
编辑:这是针对 java 的。
【问题讨论】:
这是一个java.?(?<!@)\([^]*)
呢?
您是要匹配
前面的字符还是只匹配x
部分?
所以你只想匹配
里面的内容?
知道了,那么(?<=(?<!@))([^]*)(?=)
呢?
【参考方案1】:
See regex in use here
(?<=(?<!@)\)[^]*(?=)
(?<=(?<!@)\)
积极的向后看,确保前面的内容与以下内容匹配
(?<!@)
否定后视确保前面的内容与 @
字面意思不匹配
\
匹配
字面意思。
[^]*
匹配除
之外的任何字符任意次数
(?=)
积极的前瞻确保接下来是
字面意思
结果:
eww # Matches eww
r23r23fetwe # Matches fetwe
#d2dded # Matches d2dded
@d2dded # Does not match this because @ precedes
【讨论】:
【参考方案2】:使用这个正则表达式:
(?<!@\)(?<=\).*?(?=\)
一个否定的lookbehind保证没有@
,一个肯定的lookbehind保证一个,一个肯定的lookbehind保证一个
。
在线试用here。
【讨论】:
如果两个
存在于同一字符串中,.*
将给出不正确的结果。看到它工作不正常here
@ctwheels 感谢您指出这一点。更改为.*?
。 regex101.com/r/5gA4Ji/1以上是关于正则表达式匹配两个 之间的所有内容的主要内容,如果未能解决你的问题,请参考以下文章