所以我有以下格式的字符串
[randomstring] [randomtest]
[randomstring] [texttext...
Data:
{"data}]
因此,每一行的唯一共同点是所有文本都存储在每行正好2个方括号[text1][text2]
内。问题是当文本出现在多行时:
[text1][text2
text3
text4]
所以,我正在寻找一个正则表达式来匹配每一行[][]
对,并且想出了这个:
https://regex101.com/r/vI0oF6/1
如您所见,只有第一行匹配而不是第二行。还有更好的方法吗?
答案 0 :(得分:0)
使用s
修饰符包含新行(Dot匹配换行符)。
https://regex101.com/r/vI0oF6/2
答案 1 :(得分:0)
尝试使用此表达式(\[[^\]]+\])
答案 2 :(得分:0)
您有两种选择。使用s
修饰符将换行符与.
匹配,或者只是接受方括号内的换行符。
/(\[.+?\]+\s?\[.+?\])/gs
https://regex101.com/r/vI0oF6/5
/(\[(?:.|\n)+?\]+\s?\[(?:.|\n)+?\])/g
https://regex101.com/r/vI0oF6/6
请注意,我正在使用(?:.|\n)
语法创建非捕获组。
另外,请注意我在方括号内使用了非贪婪的匹配标记?
,使其在第一次遇到方括号时停止匹配,而不是贪婪,并且还将方括号与点匹配。可视化,量词(?
或*
)之后的+
执行此操作:
?
,.+
会贪婪并且匹配到最后一次见面]
# Simple example: \[.+\]
[foo][bar]
^--------^
?
时,.+
非贪婪且仅匹配到第一次见面]
# Simple example: \[.+?\]
[foo][bar]
^---^
答案 3 :(得分:0)
我想这是你正在寻找的(\[[^\]]+\])
。
它匹配[
后跟]
以外的一个或多个字符,后跟]
。如果您想匹配括号内没有任何内容的内容,请使用*
代替+
。
注意:我的理解是您需要匹配第一行[text1]
和
[text2]
和[text1]
[text2
text3
text4]
当输入时,从第3行到第5行
[text1] [text2]
[text1][text2
text3
text4]