使用preg_match_all在php中搜索值

时间:2012-12-08 15:27:17

标签: php pcre preg-match-all

我有一个字符串:

<li><a href="http://www.site.tv/watch/some-text-english-subbed-dubbed-online/" title="title">title</a></li><div class="clear"></div></ul><h3><a name="dot">.dot</a></h3><ul><li><a href="http://www.site.tv/watch/searched-too-some-words-english-subbed-dubbed-online/" title="title2">title22</a></li>

我希望用preg_match_all找到“some-text”和“search-too-some-words”。 但它不适用于此

preg_match_all('/http\:\/\/www\.site\.tv\/watch\/([^-]*)-english[^\/]*/s', $var, $result, PREG_PATTERN_ORDER);

$ result将无所事事

preg_match_all('/http\:\/\/www\.site\.tv\/watch\/(.*)-english[^\/]*/s', $var, $result, PREG_PATTERN_ORDER);

$result will be: http://www.site.tv/watch/some-text-english-subbed-dubbed-online/" title="title">title</a></li><div class="clear"></div></ul><h3><a name="dot">.dot</a></h3><ul><li><a href="http://www.site.tv/watch/searched-too-some-words-english-subbed-dubbed-online

有没有办法在“http://www.site.tv/watch/”之后找到这个词,直到“-english”

问候 基督教

1 个答案:

答案 0 :(得分:1)

我假设您要在单词english之前匹配带文字的网址。

尝试

preg_match_all('/http\:\/\/www\.site\.tv\/watch\/(.*?)-english[^\/]*/s', $var, $result, PREG_PATTERN_ORDER);

实际上,您不需要转义冒号:。更好的是,你可以使用其他东西作为分隔符,正如Asad的评论所说的那样

preg_match_all('|http://www\.site\.tv/watch/(.*?)-english[^/]*|s', $var, $result, PREG_PATTERN_ORDER);

.*?这是一个懒惰的匹配 - 让.匹配尽可能少的字符,直到找到下一个匹配/令牌,在您的情况下为-english