正则表达式除了一个特定的任何字符,使用break line PHP

时间:2016-07-06 09:10:42

标签: php regex

我想构建一个正则表达式,用[[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。

1 个答案:

答案 0 :(得分:0)

要排除某个字符,请使用否定的类:[^x]匹配除x之外的任何字符。由于]在字符类中具有特殊含义,因此您必须将其转义:[^\]]

如果双括号内的文字可以包含括号,那么简单地排除]可能会给您带来不良后果:\[\[[^\]]*\]\]不匹配[[this]test]]

我相信你的正则表达式的唯一问题是它是贪婪的:它会尽可能多地匹配,而不是停留到第一个匹配,所以[\S\s]类将匹配右括号,只要有是\]\]之后可以匹配的其他人 所以我的建议是让你的[\S\s]+部分懒惰/不贪婪,如下所示:

/\[\[([\s\S]+?)\]\]/s

您可以尝试on regex101