当前正则表达式:
"/\[(.*?)\](.+?)\[\/(.*?)\]/"
现在我有以下内容:
[test]textextext[/test]
它工作正常,但找不到
[test]tesxc
tcxvxcv
[/test]
我该如何解决这个问题?非常感谢帮助。
答案 0 :(得分:3)
您可以使用/s
标记使.
与新行匹配。例如:
/\[(\w+)](.+?)\[\/\1]/s
答案 1 :(得分:0)
试试这个
/\[(.*?)\][^.]+\[\/(.*?)\]/
您可以在regexpal.com上测试这些正则表达式
答案 2 :(得分:0)
实际上......单独s
旗帜可能不是一个好主意,因为这样可以:
[te
xt]123
456[/tex
t]
我想你可能想要这个:
"(\[(?>([^\]])*)\](.+?)\[/\1\])s"
这使用了一些巧妙的技巧:
[^\]]*
而不是.*?
,所以只使用一次的东西效果更好,而且更明确地说明了重复的结果\1
与开始标记相匹配,假设您需要[abc]...[/abc]
而不是[abc]...[/def]
()
代替//
来分隔正则表达式 - 括号成对出现,因此无需在内部进行任何转义(您会注意到我在结束标记中只有/
模式而不是\/
),但这也可以作为一个方便的提醒,匹配数组中的第一个索引是整个匹配。答案 3 :(得分:0)
只需使用/s
修饰符。
参考:
s(PCRE_DOTALL)如果设置了此修饰符,则表示中的点元字符 pattern匹配所有字符,包括换行符。没有它, 新线被排除在外。此修饰符等效于Perl's / s 修改。诸如[^ a]的否定类总是匹配换行符 字符,与此修饰符的设置无关。
http://php.net/manual/en/reference.pcre.pattern.modifiers.php