我有一长串html。从这个字符串我想解析一对城市的rus和eng名称。此字符串的示例是:
$ html =' Абакан Хакасияреспублика Абан Красноярскийкрай Абатский Тюменскаяобласть “;
我的代码是:
$subject = $this->html;
$pattern = '/<a href="([\/a-zA-Z0-9-"]*)">([а-яА-Я]*)/';
preg_match_all($pattern, $subject, $matches);
尝试使用regexer。你可以在这里看到它http://regexr.com/399co 在测试中使用全局修饰符 - / g 因为在PHP中我们不能使用/ g修饰符我使用preg_match_all函数。但是preg_match_all的结果很奇怪:
Array
(
[0] => Array
(
[0] => <a href="/forecasts5000/russia/republic-khakassia/abakan">Абакан
[1] => <a href="/forecasts5000/russia/krasnoyarsk-territory/aban">Абан
[2] => <a href="/forecasts5000/russia/tyumen-area/abatskij">Аба�
[3] => <a href="/forecasts5000/russia/arkhangelsk-area/abramovskij-ma">Аб�
)
[1] => Array
(
[0] => /forecasts5000/russia/republic-khakassia/abakan
[1] => /forecasts5000/russia/krasnoyarsk-territory/aban
[2] => /forecasts5000/russia/tyumen-area/abatskij
[3] => /forecasts5000/russia/arkhangelsk-area/abramovskij-ma
)
[2] => Array
(
[0] => Абакан
[1] => Абан
[2] => Аба�
[3] => Аб�
)
)
首先 - 它只找到第一场比赛(但我需要获得所有比赛的数组) 第二个结果对我来说很奇怪。我想得到下一个结果: 对/ forecast5000 /俄罗斯/共和国 - 卡哈西亚/阿巴坎和Абакан 我做错了什么?
答案 0 :(得分:4)
结果的元素0是正则表达式的每个完整匹配的数组。元素1是捕获组1的所有匹配的数组,元素2包含捕获组2,依此类推。
您可以使用PREG_SET_ORDER
标志将其反转。然后元素0将包含第一个匹配的所有结果,元素1将包含第二个匹配的所有结果,依此类推。在其中的每一个中,[0]
将是完全匹配,其余元素将是捕获组。
如果您使用此选项,则可以获得所需的信息:
foreach ($matches as $match) {
$url = $match[1];
$text = $match[2];
// Do something with $url and $text
}
答案 1 :(得分:0)
您还可以使用GitHub/me/XamZeroMq,每种情况都有单独的方法:)
$subject = $this->html;
pattern('<a href="([/a-zA-Z0-9-"]*)">([а-яА-Я]*)')
->match($this->html)
->all()
->forEach(function (Match $match) {
$match = $match->text();
$group = $match->group(1);
echo "Match $match with group $group"
});
我也有自动定界符