【问题标题】:Regex to find content of the last occurence of square brackets正则表达式查找最后一次出现方括号的内容
【发布时间】:2022-02-12 03:18:30
【问题描述】:

大家好,

我目前正在使用 preg_match,我正在尝试提取一些信息括在方括号中

到目前为止,我已经使用了这个:

/\[(.*)\]/

但我希望它只是最后一次出现的内容 - 或者第一个,如果从最后开始!

如下:

string = "Some text here [value_a] some more text [value_b]"

我需要得到:

"value_b"

任何人都可以提出一些可以解决问题的方法吗?

谢谢!

【问题讨论】:

  • 使用 preg_match_all 和你想要的值。更重要的是:让量词变得懒惰:.*?.
  • @FelixKling:不需要惰性量词,只需使用补充字符类 - 请参阅我的答案。事实上,你应该学会尽可能避免懒惰的量词。
  • @fge:没错,会更快……他还是应该用preg_match_all
  • 好吧,如果只是最后一场比赛,那就没必要了——让.*把它全部吃掉,然后回溯到第一个[

标签: php regex


【解决方案1】:

比赛对手:

/.*\[([^]]+)\]/

使用preg_match(这里不需要_all版本,因为你只想要最后一个组)并捕获里面的组。

您当前的正则表达式和您的输入将捕获value_a] some more text [value_b。在这里,第一个 .* 吞噬了所有内容,但必须回溯以匹配 [ - 输入中的最后一个。

【讨论】:

  • 太棒了!效果很好!我刚刚有时间写我的简历并得到了完美的回应……非常感谢!
【解决方案2】:

如果您只期望数字/字母(无符号),您可以使用 \[([\w\d]+)\]preg_match_all() 并将数组的最后一个作为结束变量。您可以通过在字符类定义中对它们进行转义来添加任何自定义符号。

【讨论】:

  • 感谢您指出这一点!就我而言,我正在检索由正斜杠分隔的两个数字,所以我想它不起作用。另外,我想保持简单。但很高兴知道!
  • 您可以将正斜杠转义到字符类定义 :) 因此,类似于 \[(\d+\/\d+)\] 的数字斜杠号码
【解决方案3】:

\[([^\]]*)\][^\[]*$

here on regexr

var someText="Some text here [value_a] some more text [value_b]";
alert(someText.match(/\[([^\]]*)\][^\[]*$/)[1]);

括号内的部分存储在捕获组 1 中,因此您需要使用 match()1 访问结果。

对于简单的括号,请参阅做出此答案的来源:Regex for getting text between the last brackets ()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2021-10-15
    • 2012-01-12
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多