我正在尝试解析一个字符串并从中获取定义为token[content]
的标记。例如:
url[javascript:void(0)] onclick[somedata] img[someimage] LinkKey[abcd]
我正在使用preg_match
,但正则表达式不按我想要的方式工作。有效地,令牌要么位于内容的开头,要么位于中间。如果在中间他们前面有一个空格。令牌是一些字符串,后跟一个括号,内容和一个右括号。在上面的例子中,我需要得到结果url,onclick,img,LinkKey。
我试过了
(.*\[.*\])
但它与令牌无法正确匹配
任何指针都非常受欢迎。
答案 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)
仅允许url
或img
?:
这个群组不应匹配的{{1}}的简短展示。