Php preg_replace中的Regex用于检测url格式和提取元素

Php preg_replace中的Regex用于检测url格式和提取元素,php,regex,url,pattern-matching,Php,Regex,Url,Pattern Matching,我需要用嵌入的flash对象替换某些用户输入的url…我在使用正则表达式匹配url时遇到了问题…我认为主要是因为url对SEO友好,因此更难解析 URL structure: http://www.site.com/item/item_title_that_can_include_1('_etc-32CHARACTERALPHANUMERICGUID 我需要检测该格式的URL的匹配,并捕获32CHARACTERALPHANUMERICGUID,它总是放在URL中的-后面 大概是这样的: $re

我需要用嵌入的flash对象替换某些用户输入的url…我在使用正则表达式匹配url时遇到了问题…我认为主要是因为url对SEO友好,因此更难解析

URL structure: http://www.site.com/item/item_title_that_can_include_1('_etc-32CHARACTERALPHANUMERICGUID
我需要检测该格式的URL的匹配,并捕获32CHARACTERALPHANUMERICGUID,它总是放在URL中的-后面

大概是这样的:

$ret = preg_replace('#http://www\.site\.com/item/([^-])-([a-zA-Z0-9]+)#','<embed>itemid=$2</embed>', $ret);
$ret=preg\u replace('#http://www\.site\.com/item/([^-])-([a-zA-Z0-9]+)#','itemid=$2',$ret);
由于某些原因,上面的代码找不到指定格式的URL的匹配项。我不熟悉正则表达式,所以我想我遗漏了一些非常明显的东西

你应该退房

检查结果-它是用于解析URL的。您将能够从返回的令牌中提取所需的数据

如果你疯了,试试这个

/^http:\/\/www\.site\.com\/item\/[^-]*\-([a-zA-Z0-9]{32})$/
你的例子就快到了,但是

  • 如果不指定字符范围,即
    [^-]
    ,则仍然需要一个量词。我放置了
    *
    ,或0或更多
  • 您似乎没有使用项目标题,因此我们不会费心捕捉它
  • 如果字符串始终与之完全相同,则应使用开头(
    ^
    )和结尾(
    $
    )锚定
  • 您说GUID是32个字符,所以我们可以使用
    {32}
    量词显式地声明它

亚历克斯,你就是那个人。这很有效。非常感谢你的帮助。