Php 包含在双方括号中的任何对象的正则表达式
我一直在尝试提取一些字符串或任何类型的值,这些值都包含在双方括号中。i、 e.Php 包含在双方括号中的任何对象的正则表达式,php,regex,string,Php,Regex,String,我一直在尝试提取一些字符串或任何类型的值,这些值都包含在双方括号中。i、 e.[[hello world]]或[[12_u九]]等。这意味着除了用两个方括号括起来以外的任何东西。请检查这个,我试过的地方。然而,我在下面解释我所做的: /\[[^\]]*\]]/ 此模式可以验证[[]]中的任何内容。我的问题是,它还验证了[]。我举两个例子来验证这部分内容[[Welcome]][v2.0]]。我需要第二个例子不应该被验证。请参阅,您可以更好地理解。您需要: /\[\[[^\]]*\]\]/ 以下
[[hello world]]
或[[12_u九]]
等。这意味着除了用两个方括号括起来以外的任何东西。请检查这个,我试过的地方。然而,我在下面解释我所做的:
/\[[^\]]*\]]/
此模式可以验证[[]]
中的任何内容。我的问题是,它还验证了[]
。我举两个例子来验证这部分内容[[Welcome]]
[v2.0]]
。我需要第二个例子不应该被验证。请参阅,您可以更好地理解。您需要:
/\[\[[^\]]*\]\]/
以下是它的定义:
- 前两个(转义)括号:
\[\[
- 然后是非括号的内容:
[^\]]*
- 然后是两个结束括号:
(你也可以让它们不被替换,这是风格的问题)\]\]
注意,它与中间有方括号的字符串不匹配(例如<代码> [A[B] C])/代码>。如果要允许这些字符串,请使用
/\[\[.*?\]\]/
如果这必须是整个字符串,就像您在下面的评论中看到的那样,请使用
/^\[\[.*?\]\]$/ (if you want to allow brackets inside)
/^\[\[[^\]]*\]\]$/ (if you don't)
^
一个$
是字符串末尾的锚,可以让你测试整个字符串。试试这个正则表达式
\[{2}[^\[\]]+\]{2}
试试这个
解释
\[{2}
我要的正是[[
\[{2}
我想要的正是]
[^\[\]+
我想要任何不是[
或]
重复一次或多次的东西(?<=[^\[]\[{2})[^\[\]]+(?=\]{2}(?!\]))
(?OP“为什么需要这个”?你更改了什么?为什么更改了它?OP的代码有什么问题?这对我来说不匹配。例如,aa[[bb]]cc-dd中没有匹配项
@marekful在你的控制台中键入这个:/\[\[^\]*\]\]/.测试([[aa[[bb]]cc-dd]))
标记是PHP而不是JavaScript。@StreetCoder你是什么意思?确切的要求是什么?你必须准确地写下约束条件。如果你不想在前面加括号,你可以在前面加上(^ |[^\]])
。例如,你需要使用\[
和]
来转义\]@ OHuuth:关闭方括号不是一个特殊字符,除了字符类不在第一个位置之外,或者在<代码> ^ 之后立即就不需要被转义,是否允许中间括号中的方括号?