我在文本[Attachment: image;upload;url]
中有一个特殊标记来解析它我需要找到所有这些标记,我写了这个正则表达式:
preg_match_all("/.*(\[Attachment: (.*);upload;(.*)\]).*/", $text, $matches);
一切正常,它会返回
Array
(
[0] => Array
(
Text
)
[1] => Array
(
[Attachment: image;upload;url]
)
[2] => Array
(
image
)
[3] => Array
(
url
)
)
但是这里有一个问题,当文本包含两个或更多标签时,它只返回有关最后建立标签的信息。
答案 0 :(得分:3)
您应该只匹配标签,而不是周围的文字:
"/\[Attachment: ([^;]*);upload;([^\]]*)\]/"
您也可以使用.*?
来使用非贪婪匹配,而不是使用否定字符集;但是,我更喜欢使用前瞻设置。
答案 1 :(得分:0)
从正则表达式的末尾删除.*
部分。使用.*
,正则表达式匹配字符串的结尾,包括您要查找的任何其他子字符串。 (或者至少是同一行上的所有内容 - 我不记得PHP中的默认设置。)之后它会从字符串的末尾查找更多匹配项,但找不到任何匹配项。
答案 2 :(得分:0)
这个正则表达式应该这样做:
$ regex ='/ [附件:(。*?);(。*?);(。*?)] /';
preg_match_all($ regex,$ string,$ matches);
对我来说,这回来了你想要的东西(3个结果);