【问题标题】:Regex Mystery - Can you help me add these options?Regex Mystery - 你能帮我添加这些选项吗?
【发布时间】: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


【解决方案1】:

我会用这个:

~<(h2|p|li|div)([^\>]+)?>([^\<]+)?</(h2|p|li|div)>~

这说明了开始标签中的 class="xyz" 之类的内容。

这将修复您提供的正则表达式,但如果您想完成您在问题底部描述的内容,您可能需要更复杂的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2011-12-08
    • 2023-01-22
    • 2013-01-28
    • 2021-08-29
    • 2017-12-23
    相关资源
    最近更新 更多