php - 正则表达式完全匹配

时间:2015-08-14 13:29:42

标签: php regex

我有以下字符串:

Falchion-Case
P90-ASH-WOOD-WELL-WORN

我还在文本文件中包含以下URL:

http://csgo.steamanalyst.com/id/115714004/FALCHION-CASE-KEY-
http://csgo.steamanalyst.com/id/115716486/FALCHION-CASE-
http://csgo.steamanalyst.com/id/2018/P90-ASH-WOOD-WELL-WORN

我循环遍历文本文件中的每一行,并检查是否在网址中找到该字符串:

// Read from file
if (stristr($item, "stattrak") === FALSE) {
    $lines = file(public_path().'/csgoanalyst.txt');
    foreach ($lines as $line) {
    // Check if the line contains the string we're looking for, and print if it does
        if(preg_match('/(?<!\-)('.$item.')\b/',$line) != false) {  // case insensitive
            echo $line;
            break;
        }
    }
}

这在$item = P90-ASH-WOOD-WELL-WORN时效果很好但是当$item = Falchion-Case只有第二个http://csgo.steamanalyst.com/id/115716486/FALCHION-CASE-有效时,它与两个网址匹配

2 个答案:

答案 0 :(得分:1)

尝试修改您的regx以匹配行的结尾,假设行结束

 '/('.$item.')$/'

这将匹配

  http://csgo.steamanalyst.com/id/115714004/FALCHION-CASE-KEY- <<end of line

基本上以类型匹配结束,你也可以这样做

   '/('.$item.')\-?$/'

可选地匹配结束连字符

答案 1 :(得分:0)

您还可以使用否定前瞻来否定这种不必要的情况:

preg_match('/(?<!-)'. preg_quote($item) .'(?!-\w)/i', $line);