所以我有以下格式的字符串
[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]