正则表达式 懒惰与贪婪混淆

2024-04-10

我对正则表达式和贪婪与懒惰有点困惑。这真的非常简单,感觉就像我错过了一些明显的东西。

我已尽可能简化我的问题以使其清楚。考虑以下字符串和正则表达式模式。

string:
aaxxxb

pattern:
(?<=a)(.*?)(?=b)

result:
axxx

what I expected:
xxx

这个结果是我期望使用 .* 而不是 .*?,我错过了什么?

显然,如果我使用 a.*?b ,同样会得到 aaxxb。为什么是这样?惰性(如 .*?)不应该返回尽可能少的字符吗?


您忽略了这样一个事实:正则表达式引擎从左到右、逐个位置地工作,并且一旦在当前位置找到匹配项就会成功。

在您的示例中,模式成功的第一个位置是第二个“a”。

懒惰只在右侧起作用。

如果你想获取“xxx”,更好的方法是使用否定字符类[^ab]*代替.*?

注意:与主题不完全相关,但很高兴知道:DFA 正则表达式引擎将尝试在交替的情况下获得最大结果,NFA 为您提供第一个成功的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式 懒惰与贪婪混淆 的相关文章

  • 从字符串向量中删除方括号

    我有一个字符向量 其中每个元素都括在括号中 我想 去掉括号 只剩下字符串 所以我尝试 n c Dave Tony Sara paste n sep 不幸的是 由于某种原因这不起作用 在使用相同的代码之前我已经执行了相同的任务 并且不确定为什
  • Django 中不捕获可选 URL 元素

    我正在使用 Django 并且想要匹配 URLdomain com w and domain com words 我有一个以下形式的配置行 url r w ords app name views view words view words仅
  • nginx 代理重定向,带有来自 uri 的端口

    我正在尝试使用 nginx 进行重定向 这个想法是将某些端口的 uri id 1234 重定向到 localhost 1234 固定端口的重定向 location id 1234 rewrite id 1234 1 break proxy
  • 有没有办法缩短这个正则表达式?

    以下正则表达式适合我的模式 但是 我想知道是否有办法缩短它 我不能使用 w 因为我只想要不区分大小写的英文字母 因为该模式重复 所以我想知道是否可以将其分组 如果可能的话 A Za z 5 A Za z 3 A Za z 3 A Za z
  • python 文件中的单词分析和评分

    我正在对一个句子进行逐字分析 例如 嘿那里 这是一部很棒的电影 我有很多像上面这样的句子 我有一个巨大的数据集文件 如下所示 我必须快速查找该单词是否存在 如果是 则进行分析并存储在字典中 例如从单词的文件中获取分数 句子最后一个单词的分数
  • 如何使用正则表达式删除JS中的ul标签和所有包含的内容

    我如何用js删除ul标签和所有内容 例子 div ul li a li li b li ul div 我要这个 div div i use var replace regex 有人可以帮助我吗 诗 只有js 我不能使用Jquery 如果您坚
  • 从字符串中提取第一个数字

    我有一个字符串 thisLine 其中包含由空格分隔的 11 个数字 我只想获取第一个数字 我尝试了命令 grep d d thisLine value TRUE 它返回整个字符串 而不是第一个数字 如何只返回第一个数字 我确信有很多可能性
  • 禁用特定 java 包的所有 checkstyle 检查

    我有两个包 即 com mydomain abc delegate xyz jaxws 托管 and com mydomain abc xyz jaxws managed 我要求仅对第二个包禁用 checkstyle 因为它们包含自动生成的
  • 如何使用正则表达式获取两个特定字符“:”和“@”之间的字符串部分?

    如何获取 SIP URI 的一部分 例如我有 URIsip email protected cdn cgi l email protection 我需要得到只是username我用 sip 表达式 但出现的结果是username 我如何从匹
  • 如何连接行并添加分隔符?

    命令J连接线 命令gJ连接线删除空格 是否还有连接行的命令 在行之间添加分隔符 Example Input text other text more text text 我想做的事 选择这4行 如果开始和 或 EOL 处有空格 请将其删除
  • 正则表达式引擎如何解析具有递归子模式的正则表达式?

    此正则表达式匹配回文 1 2 我无法理解它是如何工作的 递归何时结束 以及正则表达式何时从递归子模式中断并转到 part Thanks 编辑 抱歉我没有解释 2 and 1 1 指第一个子模式 对其自身 2 反向引用第二个子模式的匹配 即
  • 重定向 url 的正则表达式

    是否有一个正则表达式可以匹配这些 url 重定向情况 我已经尝试了几个小时了 我得到的最接近的是 c p 但它不匹配 p or c https regex101 com r ezb0jX 1 https regex101 com r ezb
  • 用于匹配字符的正则表达式,但当它包含在方括号中时则不匹配

    输入字符串 Wsg Fs A A A Cgbs Sg7 Wwg s Fs A A Afk Cgbs Sg7 所需的输出是一个字符串数组 Wsg Fs A A A Cgbs Sg7 Wwg s Fs A A Afk Cgbs Sg7 如果我将
  • 正则表达式 - 检查输入是否仍有机会匹配

    我们有这样的正则表达式 var regexp one two three 所以只有像这样的字符串 one two three or one two three four or one twotwo three 等会匹配它 但是 如果我们有类
  • 仅在大括号外的空格上分割字符串

    我是正则表达式新手 我需要一些帮助 我阅读了一些与此问题类似的主题 但我不知道如何解决它 我需要在不在一对大括号内的每个空格上分割一个字符串 大括号外的连续空格应被视为单个空格 TEST test test test test test t
  • 如何使用正则表达式匹配模式的最后一次出现

    我有一个像这样的字符串 token1 token2 我要匹配 token2 使用正则表达式 它应该匹配的其他可能的情况是 token1 应该匹配 最后一个 token1 应该匹配 最后一个 token1 token2应该匹配 token2
  • JavaScript:是否有完全支持环视的正则表达式库?

    As JavaScript 的内置正则表达式库 https developer mozilla org en US docs Web JavaScript Guide Regular Expressions不支持向后看 http www r
  • 正则表达式匹配整个单词[重复]

    这个问题在这里已经有答案了 我在 stackoverflow 上看到了很多关于使用正则表达式进行全词匹配的例子 我有以下情况 我想用 www xyz com 替换 www abc com string RetVal I am going t
  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望

随机推荐