如果它包含特定链接,我正在尝试搜索以下文本:
this my test text and it ontains the link to http://example.com/abc/files and http://example.com/def/files
我希望如果我搜索链接http://example.com/*/files
,它应该显示文本。
我尝试了这段代码但没有结果:
if (preg_match("/http://example.com/i", $content, $matches, PREG_OFFSET_CAPTURE))
{
// Code Here
}
答案 0 :(得分:2)
您有两种选择:
逃脱/
if (preg_match("/http:\/\/example.com/i", $content, $matches, PREG_OFFSET_CAPTURE)) {
使用#
代替/
if (preg_match("#http://example.com#i", $content, $matches, PREG_OFFSET_CAPTURE)) {
另外要使用*
,您需要在正则表达式中使用.
,所以这样:
if (preg_match("#http://example.com/.*/files#i", $content, $matches, PREG_OFFSET_CAPTURE)) {
但请确保简单的外卡与您的字符串中的http://example.com/abc/files and http://example.com/def/files
匹配。因为,您要尝试匹配http://example.com/
和/files
之间的任何字符。因此,在这种情况下,它会找到第一个实例和最后一个实例。试图匹配所有中间!要仅匹配第一个实例,请使用.*?
。所以你必须插入两个额外的符号。
答案 1 :(得分:1)
你可以这样做,不要使用.*
匹配结果http://example.com/abc/files and http://example.com/def/files
使用[^/]+
或.*?
而不是
$content = 'this my test text and it ontains the link to http://example.com/abc/files and http://example.com/def/files';
if(preg_match("#http://example.com/[^/]+/files#i", $content, $matches)) {
echo $matches[0];
# http://example.com/abc/files
}
答案 2 :(得分:0)
除了使用正则表达式之外的另一个建议是fnmatch()
,因为它也可以对字符串进行匹配检查。支持shell通配符
if (fnmatch("*http://example.com/*/files*", $content)) {}
可能存在一些限制,例如字符限制(4096?因为它通常用于文件名)并且在Windows中不受支持。