1

我正在尝试解析一个字符串并从中获取定义为token[content]. 例子:

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

我正在使用preg_match它,但正则表达式没有按我想要的方式工作。实际上,标记要么在内容的开头,要么在中间。如果在中间,它们前面有一个空格。标记是一些字符串,后跟括号、内容和右括号。在上面的例子中我需要得到结果url,onclick,img,LinkKey。

我试过了

(.*\[.*\])

但它与标记不正确匹配

任何指针都值得赞赏。

4

2 回答 2

2

你可以使用这个:

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

print_r($matches);

位置无所谓。

于 2013-06-17T18:34:01.687 回答
1

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

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

您的问题可能是您的正则表达式被解释为 greese,因此直到最后一个字符]都将被消耗。要强制非 gready 你也可以试试这个:

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

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

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

关于(?:url|img)仅允许url或不应该匹配该组img的含义的简短说明。?:

于 2013-06-17T18:22:15.407 回答