【发布时间】:2013-11-27 16:39:09
【问题描述】:
我正在尝试使用 REGEX 在保持分隔符的同时拆分字符串。我希望通过锚标签拆分一个非常大且不可预测的字符串。我使用 HTML tidy 来确保标签是正确的,但是任何东西都可能出现在我希望匹配的锚标签之前或之后。
*PRECEDING-ANYTHING*<a *ANYTHING*>*ANYTHING*</a>*PROCEDING-ANYTHING*
*PRECEDING-ANYTHING*<a *ANYTHING*>*ANYTHING*</a>*PROCEDING-ANYTHING*
href URL 可以是任何东西,而诸如“目标”之类的附加属性也可以是任何东西。
我做了很多搜索和测试,要么我做错了,要么 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 是最佳的。不过,也许这将是一次学习经历。
【问题讨论】:
-
请看
DOMDocument类,它更加实用并且支持加载部分代码。您可以轻松加载其中一行并让它找到所有a-tags。 -
在这里查看第一个答案:stackoverflow.com/questions/1732348/…
-
显示一些你尝试过的正则表达式。
-
感谢 cmets。我已经对这些其他方法进行了大量阅读,目前据我所知,正则表达式仍然是完成这项任务的最佳方式。我之前已经看到使用 PHP 正则表达式成功完成了这种操作,并通过正则表达式完成了它。我知道这可能是一种肮脏的做法,但在这种情况下,这将是一次学习体验。另外,我想指出我上面使用的示例不仅仅是行,ANYTHING 文本可以是段落、其他 HTML、字符、换行符等。
-
你真的不想为此使用正则表达式。但是这里是 /.*(
).*/i
标签: php html regex string split