PHP如何预匹配此字符串?

PHP如何预匹配此字符串?,php,regex,preg-match,Php,Regex,Preg Match,我有一长串的IP地址和端口。我正在尝试从一个类似以下内容的列表中预匹配端口号: /connect=;;41.26.162.36;;192.168.0.100;;8081;; /connect=;;98.250.16.76;;192.168.0.24;;8080;; /connect=;;216.152.60.12;;192.168.1.103;;8090;; /connect=;;91.11.65.110;;192.168.1.3;;8081;; 我使用以下方法匹配全局IP地址时没有遇到任何问

我有一长串的IP地址和端口。我正在尝试从一个类似以下内容的列表中预匹配端口号:

/connect=;;41.26.162.36;;192.168.0.100;;8081;;
/connect=;;98.250.16.76;;192.168.0.24;;8080;;
/connect=;;216.152.60.12;;192.168.1.103;;8090;;
/connect=;;91.11.65.110;;192.168.1.3;;8081;;
我使用以下方法匹配全局IP地址时没有遇到任何问题:

preg_match_all('/connect=;;(.+?);;/', $long, $ip);
            $ip = $ip[1][0];
            print_r($ip);
这对我来说非常有效,但我不知道如何预匹配线路末端的端口。

试试这种方法

    $re = "/connect=;;(.+?);;(\d{4});;/";
    $str = "/connect=;;41.26.162.36;;192.168.0.100;;8081;;/connect=;;98.250.16.76;;
    192.168.0.24;;8080;;/connect=;;216.152.60.12;;192.168.1.103;;8090;;/connect=;;
    91.11.65.110;;192.168.1.3;;8081;;";

    preg_match_all($re, $str, $matches);
说明:

  /connect=;;(.+?);;(\d{4});;/g

   connect=;; matches the characters connect=;; literally (case sensitive)
  1st Capturing group (.+?)
    .+? matches any character (except newline)
        Quantifier: +? Between one and unlimited times, as few times as possible, 
   expanding as needed [lazy]
   ;; matches the characters ;; literally
  2nd Capturing group (\d{4})
    \d{4} match a digit [0-9]
        Quantifier: {4} Exactly 4 times
  ;; matches the characters ;; literally
  g modifier: global. All matches (don't return on first match)

仅对上述答案进行一点扩展:

if (preg_match_all('/connect=;;([\d\.]+);;([\d\.]+);;(\d+);;/',
                   $long, $matches, PREG_SET_ORDER)) {
  foreach($matches as $match) {
    list(,$ip1, $ip2, $port) = $match;
    /* Do stuff */
    echo "{$ip1} => {$ip2}:{$port}\n";
  }
}
你可以在IP检测上更聪明一点,但是如果你的样本格式正确,这就足够了


“/connect=;;(.+?);;d{4}/@Eric说模式
d{4}
将匹配文字字符“d”,而不是数字。模式应该是
/connect=;;(.+?);;(\d{4})/
@rpaskett true,true与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。请参阅“.BTW,它是“提前感谢”,而不是“提前感谢”。当我使用
/connect=;(.+?);(\d{4};/”时,此代码如何避免第二个(本地ip地址)我一直得到这个:
41.26.162.36;;因此,192.168.0.100