除了子表达式之外的任何东西

时间:2011-05-05 02:30:31

标签: php regex expression

我正在尝试使用PHP来识别相对src路径的正则表达式。要做到这一点,我的想法是使用前瞻(?=然后不是^和子表达式(http)但这不起作用。它适用于单个字符,但^不适用于子表达式。是否有&&运算符或什么?

 <img.*?src=[\'\"]\(?=^(http))

我需要它来获取整个http或其他以h,t或p开头的imgs会受到偏见。有什么建议?这个任务对于正则表达式来说太大了吗?

2 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻,即(?!...)而不是(?=...)。对于你的例子(我把锚点放在开头):

^(?!http)

其中包括:字符串的开头,然后是“http”的内容。

修改:因为您使用更全面的示例进行了更新:

<img [^>]*src=['"](?!http)([^'"]+)['"]

                          ^------^ - this capturing group captures the link
                                     which doesn't start with http

当然,为了正确解析,你应该使用DOM;)

答案 1 :(得分:0)

这不是最有用的答案,但听起来好像你已经达到了HTML解析中Regex的适用范围。

根据this answer here查看使用HTML DOM Parser。我没有使用PHP DOM Parser,但我知道在其他语言中,DOM解析器通常使HTML任务成为30秒的工作,而不是一小时或更长时间的奇怪案例测试。