无法找到正确的正则表达式来解析字符串

时间:2016-08-05 09:44:11

标签: javascript php regex

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

 [randomstring] [randomtest]

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

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

[text1][text2
text3
text4]

所以,我正在寻找一个正则表达式来匹配每一行[][]对,并且想出了这个:

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

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

http://regexr.com/3duup

答案 2 :(得分:0)

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

使用s修饰符

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

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

没有s-modifier

/(\[(?:.|\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]