可以';找不到合适的正则表达式来解析字符串


Can't find a proper regex for parsing the string

所以我有以下格式的字符串

 [randomstring] [randomtest]
 [randomstring] [texttext...
Data: 
{"data}]

因此,每行唯一的共同点是,所有文本都存储在每行正好2个方括号[text1][text2]中。问题是当文本出现在多行时:

[text1][text2
text3
text4]

因此,我正在寻找一个正则表达式来匹配每行的每个[][]对,并得出了以下结果:

https://regex101.com/r/vI0oF6/1

正如您所看到的,只有第一行匹配,而不是第二行。有更好的方法吗?

您有两个选项。使用s修饰符将换行符与.匹配,或者只接受方括号内的换行符。

使用s修饰符

 /('[.+?']+'s?'[.+?'])/gs

https://regex101.com/r/vI0oF6/5

不带s-修饰符

/('[(?:.|'n)+?']+'s?'[(?:.|'n)+?'])/g

https://regex101.com/r/vI0oF6/6

请注意,我正在使用(?:.|'n)语法创建一个非捕获组

此外,请注意,我在方括号内使用了非贪婪匹配标记?,使其在第一次遇到方括号时停止匹配,而不是贪婪,并将方括号与点匹配。可视化后,量词(*+(后面的?执行以下操作:

如果没有?.+是贪婪的,并且匹配直到最后一次遇到]

# Simple example: '[.+']
[foo][bar]
^--------^

对于?.+是非贪婪的,并且仅匹配直到第一次遇到]

# Simple example: '[.+?']
[foo][bar]
^---^

使用s修饰符包含新行(点与换行符匹配(。https://regex101.com/r/vI0oF6/2

尝试使用此表达式('[[^']]+'])

http://regexr.com/3duup

我想这就是您要找的('[[^']]+'])

它匹配一个[,后面跟一个或多个]以外的字符,后面跟]。如果要匹配括号内没有任何内容的,请使用*而不是+

注:我的理解是,您需要从第一行匹配[text1][text2][text1]

[text2
text3
text4]

当输入为时,从第3行到第5行

[text1] [text2]
[text1][text2
text3
text4]