我想构建一个正则表达式,用[[xxx]]和新行格式化所有字符。
[[dgghr]]
[[dfgdfgfd
dgfsdgdg]]
/\[\[([\s\S]+)\]\]/s
但这个正则表达式grep:
"df]]
[[df
d
gfdg"
我想:
"dgghr" and "dfgdfgfd
dgfsdgdg"
我试图排除"]"性格,没有成功:( 感谢你所做的一切。 -G。
我刚刚结束了!这里的解决方案: 字符串:
[[dgghr]]
[[dfgdfgfd
dgfsdgdg]]
正则表达式:
/\[\[([\s\S][^\]]+)\]\]/s
输出:
array('dgghr', 'dfgdfgfd\ndgfsdgdg')
谢谢MariaDeleva和splash58 -G。
答案 0 :(得分:0)
要排除某个字符,请使用否定的类:[^x]
匹配除x
之外的任何字符。由于]
在字符类中具有特殊含义,因此您必须将其转义:[^\]]
如果双括号内的文字可以包含括号,那么简单地排除]
可能会给您带来不良后果:\[\[[^\]]*\]\]
不匹配[[this]test]]
。
我相信你的正则表达式的唯一问题是它是贪婪的:它会尽可能多地匹配,而不是停留到第一个匹配,所以[\S\s]
类将匹配右括号,只要有是\]\]
之后可以匹配的其他人
所以我的建议是让你的[\S\s]+
部分懒惰/不贪婪,如下所示:
/\[\[([\s\S]+?)\]\]/s
您可以尝试on regex101。