我正在尝试使用PHP来识别相对src路径的正则表达式。要做到这一点,我的想法是使用前瞻(?=然后不是^和子表达式(http)但这不起作用。它适用于单个字符,但^不适用于子表达式。是否有&&运算符或什么?
<img.*?src=[\'\"]\(?=^(http))
我需要它来获取整个http或其他以h,t或p开头的imgs会受到偏见。有什么建议?这个任务对于正则表达式来说太大了吗?
答案 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秒的工作,而不是一小时或更长时间的奇怪案例测试。