繁体   English   中英

preg_match,查找并提取

[英]preg_match, find and extract

我正在使用它来确定字符串是否看起来像正确的url,然后提取一个值

if (preg_match('#^(https?:\/\/)?(www.)?site.com\/cat\/(aaa\d{5,30})\/#', $url, $urlid)) {

   echo $urlid[3];

}

它可以正常工作,但是我认为它可以更加精简/改进(或者只是更好的做法)。 我应该添加一些“负向超前”,“非捕获”还是其他?

例如(https?:\\/\\/)?(www.)? 只是一个快速的想法。 它可以工作,但是...应该真的放在括号中还是有更好的方法?

您可以这样写:

if (preg_match('~^(?:https?://)?(?:www\.)?site\.com/cat/(aaa\d{5,30})/~', $url, $urlid))
    echo $urlid[1];

改进:

  • 当您不需要捕获某些内容时,无需使用捕获组,而应使用非捕获组(?:...)
  • 无需转义/不用作分隔符时
  • 你需要逃跑. 否则,它不会被视为文字字符

优点:

  • \\.以来,该模式不再含糊不清\\. 匹配点而不是其他字符
  • 因为没有更多无用的反斜杠,所以它更具可读性
  • 使用非捕获组可节省少量内存/提高速度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM