【问题标题】:Ignore an optional prefix in expression忽略表达式中的可选前缀
【发布时间】:2015-02-09 09:45:59
【问题描述】:

如何在可选前缀之后获取字符串?示例:

Expression    Result
------------------------
[asdf]xxx  => xxx
[foo]bar   => bar
[]bla      => bla
test       => test

[...] 是可选部分。

显然,我需要一个环视断言。但我不知道让它成为可选的。

【问题讨论】:

  • \[.*?\](.*),第一组是你想要的,实现取决于你的语言
  • @MarounMaroun:这不会使 [...] 成为可选的...
  • 您使用的是哪个正则表达式引擎?大多数引擎不完全支持环视。
  • 对不起。更新了我的帖子以使其更准确。
  • @TimPietzcker 错过了可选部分。

标签: regex optional-values


【解决方案1】:

这是对@Maroun 正则表达式的修改,使[...] 成为可选:

(?:\[.*?\])?(.+)

https://regex101.com/r/hM2sK8/1

注意我是如何将第一部分放在一个非捕获组中,并在组后使用? 使其成为可选。

【讨论】:

    【解决方案2】:
    (?:\[[^\]]*\]\K)?.+$
    

    你可以试试这个。查看演示。

    https://regex101.com/r/wX9fR1/14

    \[[^\]]*\](*SKIP)(*F)|.+$
    

    查看演示。

    https://regex101.com/r/wX9fR1/15

    【讨论】:

    • 仍然捕获[]之间的部分
    • @funkwurm 现在没有
    • @vks [[^\]]*\] 我对此感到困惑?这种输出很容易通过(?:\[.*\]\K)?.+ 获得。你能解释一下[[^\]]*\]这部分代码吗?主要是我对代码中的 ^ 字符感到困惑?
    • @Hussain \[.*\] 将抓取到最后一个]。因此,如果有多个[],那么它会抓取到最后一个]。所以我们使用否定的] 技术,它声明捕获aythingg 从[ 开始直到找不到] 字符,即[^\]]
    • @vks 谢谢你的回复。
    【解决方案3】:

    最简单的方法是使用

    [^\[\]]*$
    

    匹配除括号之外的任意数量的字符,直到字符串结尾。不过,它也会匹配][]sd[][xxx 中的xxx,因此如果您需要验证字符串的结构,则此正则表达式不够具体。

    【讨论】:

    • 我同意。这通过了显示的所有测试用例,并且不需要(各种支持的)环顾四周。 (我也打算这样回答,但蒂姆超过了我!)
    猜你喜欢
    • 2010-11-28
    • 2022-01-04
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2016-01-25
    • 2013-06-15
    • 2021-11-01
    相关资源
    最近更新 更多