正则表达式全部放在括号之间

时间:2014-05-26 17:09:17

标签: regex html-parsing

我试图从这一段获取内容,但我正在使用的正则表达式是不行的,当我从段落中删除线制动然后正则表达式工作否则它不起作用请告诉我该怎么办?

以下是段落:

<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>

My Regex:

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);

2 个答案:

答案 0 :(得分:1)

我可以看到你试图通过一个html文件解析得到一些值,你应该使用一个html解析工具来做这个而不是一个正则表达式。例如:&#39; beautifulsoup&#39;在python中

答案 1 :(得分:0)

关于使用正则表达式解析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. (?=</span>)前瞻可以断言以下内容是结束范围标记的位置。