PHP Regex Anchor标记的匹配

时间:2013-11-14 15:24:11

标签: php html regex string split

我正在尝试使用REGEX将字符串分开,同时保持分隔符。我希望通过锚标签拆分一个非常大且不可预测的字符串。我正在使用HTML整洁来确保标签是正确的,但是我希望匹配的锚标签之前或之后都可能出现任何问题。

*PRECEDING-ANYTHING*<a *ANYTHING*>*ANYTHING*</a>*PROCEDING-ANYTHING*
*PRECEDING-ANYTHING*<a *ANYTHING*>*ANYTHING*</a>*PROCEDING-ANYTHING*

其中href URL可以是任何内容,其他属性(如“target”)也可以是任何内容。

我做了很多搜索和测试,要么我做错了,要么Stack Overflow上的其他答案都不适用。

使用

$parts= preg_split($pattern, $textWithAnchors, -1, PREG_SPLIT_DELIM_CAPTURE) 

我希望将$ parts与以下内容类似。

parts[0] is equal to *PRECEDING-ANYTHING*
parts[1] is equal to <a *ANYTHING*>*ANYTHING*</a>
and so forth

正则表达式捕获整个锚标记及其内部的所有内容非常重要。

我非常感谢任何帮助,我特意要求一个能在PHP中完成此操作的正则表达式。我知道有HTML解析器,但在这种情况下使用REGEX是最佳的。也许这将是一个学习经验。

1 个答案:

答案 0 :(得分:1)

使用PREG_SPLIT_DELIM_CAPTURE对您没有帮助,因为它会将分隔符正则表达式的组1中捕获的文本作为单独元素返回,但您希望分隔符包含在内包含元素。

要指定消费输入的分隔符,请使用正则表达式环顾四周
这段代码完成了这项工作:

$parts= preg_split('/(?=<a)|(?<=\/a>)/', $textWithAnchors);

使用预览标签进行拆分,看看结束标签的后面部分。

请参阅此代码的live demo,根据需要拆分示例。