我正在尝试提取方括号内的文本,也要提取方括号外的文本,直到下一个打开的括号为止,但这不是必需的。
这是我尝试过的正则表达式:
/\[(?<colors>.+)\](?<text>.+?)(?=\[)/gm
这是文本
[F:White,B:Yellow]This is some text[F:Green]more text here
[F:White,B:Yellow]This is a anothr text
在没有积极前瞻(?=\[)
的情况下,两个捕获组的行为均不正确。
答案 0 :(得分:1)
您可以使用[^][]+
模式(negated character class)来匹配[
和]
以外的1个或更多字符:
\[(?<colors>[^][]+)](?<text>[^][]+)
请参见regex demo。请注意,在演示中,我对否定的字符类添加了\n
,因为测试是在单个多行字符串上完成的,如果您针对多个单独的独立字符串进行测试,则不需要它。
在某些正则表达式引擎中,您必须在字符类中对[
或]
或两者进行转义,例如在Java,Ruby或Swift / Objective-C(Boost库)中,所以请使用>
\[(?<colors>[^\]\[]+)](?<text>[^\]\[]+)
如果text
组为空,请将(?<text>[^\]\[]+)
替换为(?<text>[^\]\[]*)
,*
将匹配0个或多个匹配项。