【发布时间】:2013-06-24 22:43:21
【问题描述】:
问题
我下面的 PHP preg_replace 正则表达式效果很好
'|(?<!</h2>)\s*\n(?!<h2>)|'
但是我更希望“h2”部分是搜索任何“h2|p|li|div”等的部分,只要它可以从我给它的选择中找到。
各种方法都试过了
'|(?<!</(?:h2|p|li|div)>)\s*\n(?!<(?:h2|p|li|div)>)|'
但它似乎不起作用。
如果有人能指出我正确的方向,这将是一个很大的帮助,因为我正在解决这个问题,以替代我昨天发布的问题。
补充说明
我对代码 BTW 的目标是查找在换行之前没有 /h2 或 /p 等并且在换行后没有 h2 或 p 等的所有换行符 (\n)。所以....
example\n <- find this
example\n <- find this
example\n <- not this (as <h2> next starts line)
<h2>example\n <- find this
example</h2>\n <- not this (as </h2> ends this line)
example\n <- find this
非常感谢,
【问题讨论】:
-
你是解析 .txt 文件还是别的什么?
-
您尝试的第二个正则表达式将不起作用,因为您使用
|字符作为分隔符,这也意味着正则表达式中的OR。这仅适用于第一个,因为您实际上并未在模式中使用|。将第一个和最后一个|替换为不同的分隔符(~可以使用)。 -
我是新来的正则表达式,所以很抱歉没有认识到这个错误。然而不幸的是,现在一条新的错误消息是:“编译失败:lookbehind assertion is not fixed length at offset 22”——lookbehind 是否需要固定长度,这意味着我不能使用多种块类型?
-
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php。
标签: php regex preg-replace preg-match markdown