如果在字符串B前面找到字符串B,则尝试匹配它

问题描述 投票:0回答:1

[我正在尝试做的是,如果字符串由以“!”开头的子字符串组成,封装在[[]和“]”中,以通过空格将那些括号与字符串的其余部分分开,例如“ [!foo]”->“ [!foo]”,“ [!bar]”->“ [!bar]”,等等。由于该子字符串可以是可变长度,所以我认为必须使用正则表达式。我的想法是分两个步骤进行操作-首先分开第一个括号,然后分开第二个括号。

第一个不难;正则表达式只是\[!,所以我可以用Java语言执行str = str.replace(/\[!/g, "[ !");。这是我无法工作的第二部分。

因为现在,如果字符串字面量为“ [!”,我需要匹配“]”在anywhere之前找到。因此,简单的正向后视不匹配,因为它仅向后显示[[direct]]:(?<=\Q[ !\E)\]不匹配。而且我仍然不明白为什么,但是我不允许在非固定长度后面加上正数; (?<=\Q[ !\E.*)\]在控制台中引发错误Syntax Error: Invalid regular expression: missing /,并且this regex debugger产生模式错误,解释为“后向内部的量词使宽度不固定”。

在后视和捕获组之间放置宽度不固定的非捕获组不起作用; (?<=\Q[ !\E)(?:.*)\]不匹配。

[一件不起作用的事情就是尝试匹配“ [!”在字符串的开头,因为整个“ [!foo]”字符串实际上是

itself

甚至更大的字符串的子字符串,并且不在开头。我想念什么?

[我正在尝试做的是,如果字符串由以“!”开头的子字符串组成,封装在[[]和“]”中,以通过空格将那些括号与字符串的其余部分分开,例如“ [!foo]”-> ...

regex regex-lookarounds lookbehind
1个回答
0
投票
您可以将此正则表达式:\[!([^]]+)\]与此替换字符串[! \1 ]一起使用。
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.