带括号的令牌的preg_match

时间:2013-06-17 18:19:16

标签: php regex preg-match

我正在尝试解析一个字符串并从中获取定义为token[content]的标记。例如:

url[javascript:void(0)] onclick[somedata] img[someimage] LinkKey[abcd]

我正在使用preg_match,但正则表达式不按我想要的方式工作。有效地,令牌要么位于内容的开头,要么位于中间。如果在中间他们前面有一个空格。令牌是一些字符串,后跟一个括号,内容和一个右括号。在上面的例子中,我需要得到结果url,onclick,img,LinkKey。

我试过了

(.*\[.*\])

但它与令牌无法正确匹配

任何指针都非常受欢迎。

2 个答案:

答案 0 :(得分:2)

您可以使用:

preg_match_all('~(?<tok>[^[\s]++)\[(?<con>[^]]++)]~', $string, $matches, PREG_SET_ORDER);

print_r($matches);

这个职位并不重要。

答案 1 :(得分:1)

我会尝试这个正则表达式:

([^\[]+\[[^\]]+\])

你的问题可能是你的法律表达被解释为绿色,所以直到最后]的所有字符都会消耗掉。要强迫非gready,你也可以试试这个:

(.*?\[.*?\])

如果你只想匹配以url或img开头的元素,你可以使用这个:

((?:url|img)\[[^\]]+\])

关于仅(?:url|img)仅允许urlimg ?:这个群组不应匹配的{{1}}的简短展示。