Preg_match确切字(UA谷歌标签)

时间:2017-08-31 16:09:04

标签: php regex curl preg-match

我尝试将精确的UA标记与curl和preg_match匹配 这是我的代码

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://symfony.com');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'UA checker');
    $result = curl_exec($ch);
    curl_close($ch);
    $chaine = "UA-89393-6;

Chaine是用户在DB中输入的UA标记。<​​/ p>

    preg_match('~\b'.$chaine.'\b~', $result);

UA-89393-5返回false

UA-8939返回虚假

UA-89393-返回true

UA-89393返回true

我的正则表达式有问题吗? 如何在破折号后找到UA字符串的完全匹配?

2 个答案:

答案 0 :(得分:0)

  

Chaine是用户在DB中输入的UA标记。<​​/ p>

如果您要查找用户输入的标记的完全匹配,请不要使用正则表达式。只需使用strpos()

if (strpos($result, $chaine) !== false) {
    // found it
}

答案 1 :(得分:0)

前言

Alex给出了最好的解决方案。这不一定是使用正则表达式的好地方,但它并不意味着它是不可能的。正则表达式不适合这种情况的原因是由于理想情况下需要多个正则表达式(或者问题的动态性质,需要单独解析两个字符串)。

答案

但是,由于您正在寻找基于正则表达式的解决方案,我决定提出一些 正则表达式hackery 。此方法要求您在唯一分隔符的任一侧连接两个UA代码,这些代码不会显示在UA代码中。为简单起见,我选择了||

以下是我用于解析UA代码并确保它们根据您的规范匹配的正则表达式。

  

假设$ chaine = UA-00000000-1

     

UA-00000000-0返回false

     

UA-0000000返回false

     

UA-00000000-返回true

     

UA-00000000返回true

注意:如果要使用换行符来分隔多行,请确保使用gm修饰符。

级联

假设您的代码最简单......

$chaine = 'UA-00000000-1';
$match = 'UA-00000000'; // or any other value
$delimiter = '||';

$string = "{$chaine}{$delimiter}{$match}";
// perform regex match against the above $string

正则表达式

^(UA-\d+)(-)(\d+)\|\|\1\2?((?=\3).*)?$

功能

  1. 匹配UA-后跟一个无限数字
  2. 匹配-
  3. 在一个和无限数字之间匹配
  4. 匹配分隔符||
  5. 匹配第一个捕获组(1。)
  6. 将第二个捕获组(2.)与零次和一次匹配
  7. 如果匹配第三组(3.),则在零和无限次之间匹配任何字符 - 在零和一次之间
  8. Here是用于连接字符串的正则表达式的一个示例。