如何使用字符串通配符php搜索文本

时间:2017-07-17 17:14:20

标签: php regex

如果它包含特定链接,我正在尝试搜索以下文本:

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
}  

3 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 逃脱/

    if (preg_match("/http:\/\/example.com/i", $content, $matches, PREG_OFFSET_CAPTURE)) {
    
  2. 使用#代替/

    if (preg_match("#http://example.com#i", $content, $matches, PREG_OFFSET_CAPTURE)) {
    
  3. 另外要使用*,您需要在正则表达式中使用.,所以这样:

    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通配符

http://php.net/fnmatch

if (fnmatch("*http://example.com/*/files*", $content)) {}

可能存在一些限制,例如字符限制(4096?因为它通常用于文件名)并且在Windows中不受支持。