【问题标题】:Non greedy LookAhead非贪婪的 LookAhead
【发布时间】:2009-07-23 09:47:21
【问题描述】:

我有如下字符串:

val:key

我可以使用/^\w*/ 捕获“val”。

我现在怎样才能得到'key'没有':'符号?

谢谢

【问题讨论】:

  • 根据您使用的语言,应该有某种 split() 命令来分割字符串。只需拆分 ":" ,然后获取最后一个元素。不需要正则表达式。
  • 我错过了最简单的解决方案!顺便说一句,密钥可能包含':'。
  • 所以你只希望它在第一个冒号上拆分?使用块限制:split(/:/, $text, 2)

标签: regex regex-greedy


【解决方案1】:

这个怎么样?

/^(\w+):(\w+)$/

或者,如果您只想捕获冒号后的所有内容:

/:(.+)/

这是一个不太清楚的示例,它使用后向断言来确保在匹配之前出现冒号 - 整个匹配将不包括该冒号。

/(?<=:).*/

【讨论】:

  • 我想用不同的正则表达式捕获它,而 /\:(.*)/ 仍然捕获 ':'
  • 但是括号可以让你提取子匹配
【解决方案2】:

您使用什么语言? /:(.*)/ 不捕获 ":" 但它确实匹配 ':'

在 Perl 中,如果你说:

$text =~ /\:(.*)/;
$capture = $1;
$match = $&;

那么 $capture 不会有 ":" 而 $match 会有。 (但尽量避免使用 $& 因为它会减慢 Perl:这只是为了说明匹配)。

【讨论】:

    【解决方案3】:

    这将捕获第 1 组中的键和第 2 组中的值。即使值包含冒号 (:) 字符,它也应该可以正常工作。

    ^(\w+?):(.*)
    

    【讨论】:

      【解决方案4】:
      /\:(\w*)/ 
      

      查找 : 然后捕获它之后的所有单词字符,直到字符串的末尾

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多