【问题标题】:Regex to get all in between the brackets正则表达式将所有内容放在括号之间
【发布时间】:2014-05-26 17:09:16
【问题描述】:

我正在尝试从此段落中获取内容,但是当我从段落中删除线闸时,我正在使用的正则表达式不起作用,然后正则表达式起作用,否则它不起作用,请告诉我该怎么办?

这是一段:

<span class="st">My Paragraph - you can download free <b>drivers</b> for audio, video, chipset, Wi
Fi or USB, or a <b>driver</b> installation pack for <b>notebook</b>/(for&nbsp;...</span><br></div>

我的正则表达式:

preg_match_all('/<span class="st">(.+?[^\n])<\/span><br><\/div>/i', $file_strings, $ti);

当我使用这一段时,它会起作用

<span class="st">My Paragraph - you can download free <b>drivers</b> for audio, video, chipset, WiFi or USB, or a <b>driver</b> installation pack for <b>notebook</b>/(for&nbsp;...</span><br></div>

输出应该是这样的

My Paragraph - you can download free <b>drivers</b> for audio, video, chipset, WFi or USB, or a <b>driver</b> installation pack for <b>notebook</b>/(for&nbsp;...

如您所见,我刚刚从 wifi 中移除了线路制动器,它正在工作,但我需要正则表达式,它可以在不移除线路制动器的情况下工作

查看此屏幕截图,我正在测试我的正则表达式 Screenshot我在这里测试 Regex tester

解决方案: @jonny-5

在正斜杠后添加 iS 而不是 i 解决了问题

 preg_match_all('/<span class="st">(.+?[^\n])<\/span><br><\/div>/is', $file_strings, $ti);

【问题讨论】:

  • @user3675088 它完全是重复的。您正尝试像那个人一样使用正则表达式解析 HTML。解决方案也是一样的:不要。使用 XML 和/或 HTML 解析器来解析 HTML。
  • @user3675088 您在问题中的代码是 HTML。您正在尝试解析它。用正则表达式。故事结束。
  • 要使点也匹配换行符,需要使用s (PCRE_DOTALL) modifier。将其放在开头(?is)&lt;span... 或结束分隔符之后的模式中:.../is
  • 感谢@Jonny5 一切正常

标签: regex html-parsing


【解决方案1】:

我可以看到您正在尝试解析 html 文件以获取一些值,您应该使用 html 解析工具而不是正则表达式来执行此操作。示例:python中的'beautifulsoup'

【讨论】:

  • @StephenOstermiller Er... 没有链接的答案永远不可能是仅链接的答案。实际上,我认为这是一个相当不错的答案,虽然包含一个示例会使它变得更好,但我不认为它是坏的。
  • 虽然此产品推荐可能会回答问题,但最好在此处包含更多信息。
【解决方案2】:

关于使用正则表达式解析 html 的所有免责声明,这里有一个与您的段落匹配的紧凑正则表达式(请参阅online demo):

(?s)<span[^>]*>\K.*?.(?=</span>)

所以在preg_match_all 中,你会得到类似的东西:

$regex = "~(?s)<span[^>]*>\K.*?.(?=</span>)~";
$count = preg_match_all($regex,$string,$matches); //optional: ,SET_PATTERN_ORDER

它是如何工作的?

  1. 匹配开始跨度标记后,\K 将其从匹配中删除以返回。
  2. .*?. 也匹配所有字符...
  3. (?=&lt;/span&gt;) 前瞻可以断言后面是结束跨度标记的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2020-01-20
    • 2019-04-15
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2019-12-20
    • 2012-03-02
    相关资源
    最近更新 更多