【问题标题】:regex reverse lazy quantifier正则表达式反向惰性量词
【发布时间】:2017-04-24 08:47:18
【问题描述】:

说我有这个字符串

X,,,X,,,X,,c,,X,,,X

我想捕捉与X.*c.*X匹配的最小字符串,即X,,,X,,,X,,c,,X,,,X

正则表达式 X.*c.*X 将捕获 X,,,X,,,X,,c,,X,,,X

通过使第二个量词变得懒惰X.*c.*?X 我得到 X,,,X,,,X,,c,,X,,,X

但是使第一个量词变得懒惰没有区别X.*?c.*?X --> X,,,X,,,X,,c,,X,,,X

如何告诉第一个量词也是懒惰的,但从另一个方向?

【问题讨论】:

    标签: regex


    【解决方案1】:

    明确禁止重复起始子字符串。

    在示例中:

    X[^X]*c.*?X --> XaaaXaaaXaacXaaaX

    多字符版本:

    (使用负面环视)

    在字符串中寻找最小的XY.*c.*XYXY,,,XY,,,XY,,c,,XY,,,XY

    XY((?!XY).)*c.*?XY --> XY,,,XY,,,XY,,c,,XY,,,XY

    【讨论】:

    • 这是正确的。没有“其他方向”——正则表达式总是返回最早(最左边)的成功匹配。因此,如果 XaaaXaaaXaacXaaaX 和 XaaaXaaaXaacXaaaX 都匹配,您将始终获得第一个。返回第二个的唯一方法是确保第一个不成功。
    • 否定字符类不适用于多字符值。
    • 是的,SO 上已经有这样的问题了。你是骗子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多