Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 另一个正则表达式:方括号_Php_Regex_Preg Match - Fatal编程技术网

Php 另一个正则表达式:方括号

Php 另一个正则表达式:方括号,php,regex,preg-match,Php,Regex,Preg Match,我有一些类似于:word[val1 | val2 | val3]。需要一个正则表达式来同时捕获:word和val1 | val2 | val3 另一个示例:leader[77] 结果:需要一个正则表达式来捕获:leader和77 这就是我到目前为止所拥有的:^(.\[)(.*)它给了我:数组[0]=word[val1 | val2 | val3] 数组[1]=字[ 数组[2]=val1 | val2 | val3] 需要数组[1],但没有[ 需要数组[2],但没有] 有什么想法吗?谢谢你提供的

我有一些类似于:
word[val1 | val2 | val3]
。需要一个正则表达式来同时捕获:wordval1 | val2 | val3

另一个示例:
leader[77]
结果:需要一个正则表达式来捕获:leader77

这就是我到目前为止所拥有的:
^(.\[)(.*)
它给了我:数组[0]=word[val1 | val2 | val3]

数组[1]=字[

数组[2]=val1 | val2 | val3]


需要数组[1],但没有[

需要数组[2],但没有]


有什么想法吗?

谢谢你提供的任何一个你都可以使用的
\w*(\[.*])

\w*
匹配任何单词字符[a-zA-Z0-9] 量词:
*
介于零次和无限次之间

\[
逐字匹配字符
[
*
匹配任何字符(换行符除外)
\]
逐字匹配字符
]

编辑:我不停地敲打以摆脱括号,并想出了
(\w*)\[([^][*])]


编辑:我现在看到Wiktor在我回来之前的评论中建议的内容。

对于任何一个,你都可以使用
\w*(\[.*])

\w*
匹配任何单词字符[a-zA-Z0-9] 量词:
*
介于零次和无限次之间

\[
逐字匹配字符
[
*
匹配任何字符(换行符除外)
\]
逐字匹配字符
]

编辑:我不停地敲打以摆脱括号,并想出了
(\w*)\[([^][*])]

编辑:我现在看到Wiktor在我回来之前的评论中建议的内容。

您可以使用

([^][]+)\[([^][]*)]
这是你的电话号码

说明

  • ([^][]+)
    -组1匹配一个或多个字符,而不是
    ]
    [
  • \[
    -文字
    [
  • ([^][]*)
    -第2组捕获0多个字符,而不是
    [
    ]
  • ]
    -文字
    ]
见:

你可以用

([^][]+)\[([^][]*)]
这是你的电话号码

说明

  • ([^][]+)
    -组1匹配一个或多个字符,而不是
    ]
    [
  • \[
    -文字
    [
  • ([^][]*)
    -第2组捕获0多个字符,而不是
    [
    ]
  • ]
    -文字
    ]
见:


你能分享你尝试过的吗?
试试。或者。看@WiktorStribiżew Perfect!如果你发布它,我会接受这个答案。谢谢!你能分享你尝试过的吗?
试试。或者。看@WiktorStribiżew Perfect!如果你发布它,我会接受这个答案。谢谢!它很接近,但仍然不是我需要的。这是你的正则表达式的结果:0=>from_date_type[1];1=>[1]。。。Thanks@virrion请检查我的评论,并用两个案例测试它。但我认为这个答案与给定的输入很好。我得到了以下结果:(*)([(*))结果:
0=>from|date|type[1 | 2 | 3];1=>from|date|type;2=>[1 | 2 | 3];3=>1 | 2 | 3
。我可以使用结果1和结果3…是否可以缩短它?谢谢,所以我得到了2个额外的结果,但这是迄今为止最接近的结果。它很接近,但仍然不是我需要的。下面是正则表达式的结果:0=>from_date_键入[1];1=>[1] ... Thanks@virrion请检查我的评论,并用两个案例测试它。但我认为这个答案与给定的输入很好。我得到了以下结果:(*)([(*))结果:
0=>from|date|type[1 | 2 | 3];1=>from|date|type;2=>[1 | 2 | 3];3=>1 | 2 | 3
。我可以使用结果1和结果3…是否可以缩短它?谢谢,所以我得到了2个额外的结果,但这是迄今为止最接近的结果。请注意,如果将
]
[
放在字符类中作为
[[[]]
(或像
[^]这样的否定字符类),则不必过度扩展模式[]
)。此外,字符类外的
]
字符永远不必转义。带有少量转义符的模式看起来更干净,但这只是IMHO:)和另一点:如果第一个组仅由单词字符组成,则第一个
[^][]+
可以替换为
\w+
。然后,模式将看起来像
$re='~(\w+)\[([^][]*)]~'。我坚持使用
+
量词,因为它匹配一个或多个实例,而Jay建议使用
*
(零个或多个实例)。请注意,如果将
]
[
放在字符类中作为
[[]
(或像
[^][]
这样的否定字符类),则不必过度扩展模式。此外,字符类外的
]
字符永远不必转义。带有少量转义符的模式看起来更干净,但这只是IMHO:)和另一点:如果第一个组仅由单词字符组成,则第一个
[^][]+
可以替换为
\w+
。然后,模式将看起来像
$re='~(\w+)\[([^][]*)]~'。我坚持使用
+
量词,因为它匹配一次或多次出现,而Jay建议使用
*
(零次或多次出现)。