Preg_match_all没有给出与preg_match

时间:2016-09-14 15:08:59

标签: php regex

我一直在尝试将所有文​​件资源都放在HTML中。

我当前版本的正则表达式是

"[^']*'([^"]*)'[^']*"   |   "([^"]*)"

示例HTML(仅一部分):

<div style="background-image: url('/courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg');display: block; margin-left: auto; margin-right: auto;"></div>

                        <img class="maximize"
 src="/courses/CURSODESTINOPEQUENO/document/learning_path/LECCION_1_2_3_4_5_-_corta/Diapositiva01-29332.jpg" style="display: block; margin-left: auto; margin-right: auto;" />

迭代preg_match我可以得到:

  • /courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg
  • 最大化
  • /课程/ CURSODESTINOPEQUENO /文件/ learning_path / LECCION_1_2_3_4_5 _-_ corta / Diapositiva01-29332.jpg

但是preg_match_all只给我下一个:

  • /courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg
  

您可以在http://www.phpliveregex.com/p/h6T

进行实时测试

这有什么意义吗?可能我的正则表达式需要一些工作。

我对正则表达式没有多少经验。请帮帮我:)。

提前谢谢你!

添加了:

正则表达式实际上是这样的:

  • 由双引号分隔的任何字符串,其中包含任何不带双引号的字符串,并且还包含两个引号,其中包含可选内容,
  • 或两个带有可选内容的双引号(不带双引号)

正如我所看到的,也许没有引号和双引号条件应该稍微触及以获得更好的正则表达式...

现在使用更长的HTML示例:http://www.phpliveregex.com/p/h74

<p><img class="maximize" src="/courses/UMASGRUPOBDEMO/document/learning_path/Diapositiva54/Diapositiva2.jpg" style="display: block; margin-left: auto; margin-right: auto;" alt="" /></p>

<div style="background-image: url('/courses/UMASGRUPOBDEMO/document/learning_path/El_Contrato_de_Seguro-_Contenido_Teorico/video_pres_cto_seguro.jpg');display: block; margin-left: auto; margin-right: auto;"></div>

                        <img class="maximize"
 src="/courses/CURSODESTINOPEQUENO/document/learning_path/LECCION_1_2_3_4_5_-_corta/Diapositiva01-29332.jpg" style="display: block; margin-left: auto; margin-right: auto;" />

1 个答案:

答案 0 :(得分:1)

请尝试使用此正则表达式:

"[^"']*'([^"']*)'[^"']*"|"([^"]*)"

您的原始正则表达式贪婪地从输入中的第二个'最后一个 "之后拾取所有内容。

请注意,正则表达式中的*+运算符 greedy 意味着他们将尽可能多地使用 来匹配。< / p>

您必须使用*?+? <来限制应用这些运算符的内容(如上所述)或将其转换为支持它的正则表达式系统的非贪婪运算符: / p>

"[^']*?'[^"]*?'[^']*?"

(但是,最后一个仍会出现问题,例如使用<img src="foo" alt='bar' class="myimage" /> - 即使它不是'bar' - 分隔字符串的一部分,也会抓取"