【问题标题】:Trying to capture the following string with regex尝试使用正则表达式捕获以下字符串
【发布时间】:2014-08-02 00:43:36
【问题描述】:

我正在尝试使用正则表达式捕获此字符串。它似乎没有生成任何匹配项。

  $property = "[[resource:76e9e8b2-788a-407f-a285-4728be19f71f:";

  if(!is_array($property)) {
  preg_match("\[\[resource:(\w+-\w-\w-\w-\w):", $property, $matches);
  print_r($matches[1]);
  }

据我所知,应该将带有破折号的字母数字序列输出到 $matches 变量中 - 但实际上,当我 print_r() 输出该变量时,我什么也得不到。

那么如何在 $matches 数组中获得匹配项。

最终我想要得到的是这样的:

76e9e8b2-788a-407f-a285-4728be19f71f

【问题讨论】:

  • 这些数据从何而来?看起来您只想匹配一个 guid,即 /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/

标签: php regex


【解决方案1】:

你忘记了一堆+ 修饰符。您还忘记了正则表达式开头和结尾的分隔符。

preg_match('/\[\[resource:(\w+-\w+-\w+-\w+-\w+):/', $property, $matches);
                                 ^   ^   ^   ^

【讨论】:

  • 实际上,这似乎仍然不匹配,或者至少不匹配 print_r($matches[1]);似乎没有呼应出来。
  • 您还忘记了分隔符,显然忽略了由此引起的错误。
  • 错误没有回显到我的控制台。我应该检查一下错误日志。
  • @Barmar,您似乎忘记转义反斜杠字符以在字符串中使用。应该是"/\\[\\[resource:(\\w+-\\w+-\\w+-\\w+-\\w+):/"
  • 是的。当程序无法按预期运行时,这是我首先关注的地方之一。
【解决方案2】:

作为旁注,您可以使用完全适合十六进制字符的字符类[[:xdigit:]]

\[\[resource:([[:xdigit:]]+(?>-[[:xdigit:]]+){4}):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 2023-01-17
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多