Я использую preg_match_all получить процитированные пользователей от поста на форуме, как так:PHP/Regex/preg_match_all
preg_match_all('/quote author=(.*) link=/', $post, $quotedUsers);
в $ после строки, как правило, быть что-то вроде:
[quote author=John link=topic=1234.msg123456#msg123456 date=1234567890]Lorem ipsum dolor sit amet[/quote]
Lorem ipsum dolor sit amet consectetur elit...
preg_match_all функция отлично работает, когда только один пользователь котируется, и возвращает что-то вроде:
Array
(
[0] => Array
(
[0] => quote author=John link=
)
[1] => Array
(
[0] => John
)
)
Мой код проходит через каждый $ quotedUsers [1], чтобы получить имена пользователей, и я подумал, что все в порядке. Кроме этого, когда два пользователя цитируются, это выглядит примерно так:
Array
(
[0] => Array
(
[0] => quote author=Bob link=topic=1234.msg123456#msg13456 date=1234567890]Lorem ipsum dolor sit amet[/quote]
[quote author=John link=
)
[1] => Array
(
[0] => Bob link=topic=1234.msg123456#msg13456 date=1234567890]Lorem ipsum dolor sit amet[/quote]
[quote author=John
)
)
Что происходит и как это исправить? Я думал, что preg_match_all просто поместил бы все имена пользователей в массив $ quotedUsers [1].
Вот почему вы должны [использовать BBCode парсер] (http://stackoverflow.com/questions/488963/best-way- to-parse-bbcode «Лучший способ разбора BBCode»), как это было предложено в [вашем предыдущем вопросе] (http://stackoverflow.com/questions/3967228/php-and-regex-problem «Проблема PHP и Regex»). [Регулярное выражение не может разбираться с BBCode] (http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html «Блог Kore Nordmanns: не анализируйте HTML с помощью регулярных выражений») – Gordon