0

<!--:en-->Motodays 2014, 6.-9. of March<!--:--><!--:it-->Motodays 2014, 6-9 Marzo<!--:--> 这是我要匹配的字符串。我想匹配 2 个类似 HTML 的注释标签内的内容。

所以我尝试了:<!--:(..)-->(.+)<!--:-->以及这个正则表达式的一些额外衍生物,但找不到返回预期结果的解决方案。我还尝试 (|)检查是否存在 2 个这样的标签,但结果不可靠,因为它还需要管理 3 个或更多匹配项。

这是结果preg_match

array(
0 => <!--:en-->Motodays 2014, 6.-9. of March<!--:--><!--:it-->Motodays 2014, 6-9 Marzo<!--:-->
1 => en
2 => Motodays 2014, 6.-9. of March<!--:--><!--:it-->Motodays 2014, 6-9 Marzo
)

这就是我想要实现的目标:

array(
0 => <!--:en-->Motodays 2014, 6.-9. of March<!--:--><!--:it-->Motodays 2014, 6-9 Marzo<!--:-->
1 => en
2 => Motodays 2014, 6.-9. of March
3 => it
4 => Motodays 2014, 6-9 Marzo
)

编辑:答案建议使用preg_match_all(); 结果数组有点不同,但形式比另一个更实用。

array(
0=>array(
  0=><!--:en-->Motodays 2014, 6.-9. of March<!--:-->
  1=><!--:it-->Motodays 2014, 6-9 Marzo<!--:-->
)
1=>array(
  0=>en
  1=>it
)
2=>array(
  0=>Motodays 2014, 6.-9. of March
  1=>Motodays 2014, 6-9 Marzo
)
)
4

1 回答 1

1

(.+)是贪婪的,直到最后一场比赛。我建议添加一个?以使其不贪婪。我也会使用preg_match_all.

我认为:

<!--:([a-z]{2})-->(.*?)<!--:-->

会达到你想要的。

https://regex101.com/r/tMN6km/1/

于 2019-04-12T02:29:07.497 回答