我有这个正则表达式,可以捕获方括号内的内容。
(?<=(\[req:)).+?(?=(:req]))
这将捕获[req:和:req]内部的所有内容。例如:
my really cool string [req:do not grab this:req]that I just made
这需要:
do not grab this
但是,我想做相反的事情。我想抓住[req:和:req]内部的所有内容,包括[req:和:req]。我要抓住:
my really cool string that I just made
我正在发送一个屏幕截图,其中包含我要选择的单词,以使您更容易理解我要实现的目标。蓝色突出显示的是我要从my really cool string [req:do not grab this:req]that I just made
中选择的那些:
答案 0 :(得分:1)
您没有提到一种语言,但大多数都使用了正则表达式,
使您可以在拆分功能中使用它。
您最好的选择是使用当前正则表达式的修改版本进行拆分:
split((?<=\[req:).*?(?=:req\])
)
这将为您提供所有元素,除了它们之间有什么。
更困难的方法是直接在 右括号和右括号之间进行匹配。
即使此方法有效,但速度缓慢且没有考虑
平衡或嵌套括号(我是可以的,但是正则表达式确实很大)。
(?s)(?:^(?:(?!\[req:|:req\]).)*?\[req:|:req\](?:(?!\[req:|:req\]).)*?\[req:|:req\](?:(?!\[req:|:req\]).)*?$)
https://regex101.com/r/N331qx/1
可读版本:
(?s) # Dot-All modifier
(?:
# Beginning ...[req:
^
(?:
(?! \[req: | :req\] )
.
)*?
\[req:
| # or,
# Middle :req]...[req:
:req\]
(?:
(?! \[req: | :req\] )
.
)*?
\[req:
| # or,
# End :req]...
:req\]
(?:
(?! \[req: | :req\] )
.
)*?
$
)
答案 1 :(得分:0)
为此,您需要分别捕获双方,然后再将它们合并。
(.*\[req:).*(:req\].*)
说明:
(.*\[req:) | Capture zero or more of any characters followed by "[req:"
.* | Match zero or more of any characters
(\[req:.*) | Capture "[req:" followed by zero or more of any characters