【问题标题】:PHP (URL) matching regex issuePHP(URL)匹配正则表达式问题
【发布时间】:2012-12-28 07:42:38
【问题描述】:

我正在寻找一个正则表达式来匹配给定的 URL,其中包含类似
"/unknownnumber/knownstring1-unknownstring.html"
为了使用 PHP 将其重定向到其他新 url,例如
"/unknownnumber/knownstring2-unknownstring"
以保持 Google 索引 URL 处于活动状态。

我使用了下一条语句,但是$do_match返回0,所以我做错了什么......

有人可以帮我解决我的正则表达式吗?

$myURL = "/unknownnumber/knownstring1-unknownstring.html";
$do_match = preg_match('~"([0-9]+)/knownstring1-(.*?)$.html"~', $myURL, $matches);

【问题讨论】:

  • 所以echo '<pre>';print_r($matches);echo'</pre>';exit; 是空的?
  • 是的,它返回一个空数组,$do_match返回0

标签: php regex url


【解决方案1】:

$ 是行尾标记。您需要将其放在正则表达式的末尾,并且还意味着您需要将其转义为文字 .

preg_match('~"([0-9]+)/knownstring1-(.*?)\.html"$~'....

【讨论】:

  • 感谢您的建议,但它仍然没有返回任何匹配项...我已经看到我的正则表达式可能应该像 $do_match = preg_match('~"/([0-9] +)/knownstring1-(.*?)$.html"~', $myURL, $matches);数字前有多余的斜线,但它仍然不起作用......
【解决方案2】:

点 (.)、破折号 (-) 是具有特殊含义的元字符。

如果 'unknownnumber' 是字符串的数字部分,则正则表达式模式如下所示:

$do_match = preg_match('/\/(\d+)\/knownstring1\-([^\.]+)\.html/', $input, $matches);

【讨论】:

  • 我已经联合了两个答案(因为你给了我下一条消息:警告:preg_match()[function.preg-match]:分隔符不能是字母数字或反斜杠),所以我使用了“$do_match = preg_match('~"\/(\d+)\/knownstring1\-([^\.]+)\.html/"$~', $myURL, $matches);"但是...它仍然没有返回任何匹配...对不起..
  • 抱歉,赶时间。我已经修复了模式。它缺少前面的分隔符 - 在特定情况下是正斜杠。但是,由于您使用波浪号作为分隔符,因此采用的模式如下所示:$do_match = preg_match('~\/(\d+)\/knownstring1\-([^\.]+)\.html~', $input, $matches);
【解决方案3】:
$myURL = "/unknownnumber/knownstring1-unknownstring.html";
if(preg_match('#"/(\d+)/knownstring1-(.*)\.html"#', $myURL, $matches))
    var_dump($matches);

输出:

php > $exp = '#"/(\d+)/knownstring1-(.*)\.html"#';
php > $str = '"/23421/knownstring1-unknownstring.html"';
php > if(preg_match($exp, $str, $matches)) var_dump($matches); else echo 'nope' .     PHP_EOL;
array(3) {
  [0]=>
  string(40) ""/23421/knownstring1-unknownstring.html""
  [1]=>
  string(5) "23421"
  [2]=>
  string(13) "unknownstring"
}
php > 

【讨论】:

    【解决方案4】:

    试试这个:

    $myURL = "/123/knownstring1-unknownstring.html";
    $do_matches = preg_match('#\/(\d+)\/(.*)\-(.*)\.html#', $myURL, $matches);
    print_r($matches);
    

    print_r 输出:

    Array
    (
        [0] => /123/knownstring1-unknownstring.html
        [1] => 123
        [2] => knownstring1
        [3] => unknownstring
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多