我正在尝试使用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是最佳的。也许这将是一个学习经验。
答案 0 :(得分:1)
使用PREG_SPLIT_DELIM_CAPTURE
对您没有帮助,因为它会将分隔符正则表达式的组1中捕获的文本作为单独元素返回,但您希望分隔符包含在内包含元素。
要指定不消费输入的分隔符,请使用正则表达式环顾四周。
这段代码完成了这项工作:
$parts= preg_split('/(?=<a)|(?<=\/a>)/', $textWithAnchors);
使用预览标签进行拆分,看看结束标签的后面部分。
请参阅此代码的live demo,根据需要拆分示例。