PHP(URL)匹配正则表达式问题


PHP (URL) matching regex issue

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

我使用了下一个语句,但$do_match返回0,所以我做错了。。。

有人能帮我做一下正则表达式吗?

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

$是一个行尾标记。你需要把它放在正则表达式的末尾,也意味着你需要转义它的字面.

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

点(.(、短划线(-(是具有特殊含义的元字符。

如果"unknownumber"是字符串的数字部分,那么regexp模式将如下所示:

$do_match = preg_match('/'/('d+)'/knownstring1'-([^'.]+)'.html/', $input, $matches);
$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 > 

尝试一下:

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

打印输出:

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