1

嗨 stackoverflow 社区!
我正在尝试在 PHP 中使用基于Positive lookbehind的简单正则表达式。我的目标是提取 URL 中域名和一组特定字符(?或 & 或 /)之间的所有内容。我想在这些例子中提取“bar”:

  • foo.com/bar?
  • foo.com/bar&
  • foo.com/bar/

我试过

(?<=foo\.com\/)[^/?&]+  

它在平台测试中运行良好, 但不适用于 PHP 5.3x preg_match :抛出的错误是我不能使用多个停止字符 - 它适用于一个。

我还尝试了积极的后视/前瞻组合,但问题仍然存在。我做错什么了 ?

4

2 回答 2

1

在 PHP 中,与(比如说)JavaScript 不同,您不能在不转义的情况下使用正则表达式分隔符,即使在字符类中也是如此。所以,你需要改变这个:

"/(?<=foo\.com\/)[^/?&]+/"

对此:

"/(?<=foo\.com\/)[^\/?&]+/"
于 2012-03-16T12:35:52.737 回答
1

转义斜线:

preg_match("/(?<=foo\.com\/)[^\/?&]+/", "http://www.foo.com/bar?", $result);
                      here ___^

或使用其他分隔符

preg_match("#(?<=foo\.com/)[^/?&]+#", "http://www.foo.com/bar?", $result);
于 2012-03-16T12:36:13.790 回答