regex - 从字符捕获到第一个句点的正则表达式

标签 regex

我的正则表达式字符串看起来像

您的订单#Q-111-111-1111。账单金额为 $100.50

如何提取订单号,即“#”和第一个“.”之间的字符串

Q-111-111-1111

我试过:

/#(.*[^.])[.].+?/

但它捕获到最后一个点字符。我确定,我需要使用非贪婪匹配,但我无法做到这一点。

最佳答案

您可以简单地使用以下正则表达式:

#(.*?)\.

*greedy - 当您将 ? 附加到 时,它会导致引擎尽可能频繁地重复前面的标记.*,它将是懒惰的(贪婪的),并且会匹配到第一个点。

为了证明这一点,让我们举个例子:

  • #(.*)\. 应用于#12-34.234-3.234。 Hello World

    .* 将首先匹配所有内容,直到字符串结尾(d 字符),然后它会尝试匹配点,但它不存在,所以它会一直回溯直到匹配4,然后找到点,匹配的字符串是#1234.2343.234

  • #(.*?)\. 应用于#12-34.234-3.234。 Hello World

    .*? 只会匹配到 4,然后找到点并匹配,惰性导致它停止搜索更多要消耗的 token

关于regex - 从字符捕获到第一个句点的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738024/

相关文章:

javascript - 使用正则表达式键入时强制输入字段中的特定格式

java - 获取某些字符串之间的数组或字符串列表(搜索多个字符串)

python - 正则表达式在 python 模拟器中有效,但在 perl 中无效

javascript - 删除 URL 中的最后一个目录

regex - awk,字段不匹配但应该匹配

javascript - 如何返回完全不区分大小写的匹配项并评估为真/假

php - 尝试使用正则表达式获取基本 url

jQuery:选择具有唯一 ID 的所有输入(正则表达式/通配符选择器)

Python删除方括号和它们之间的无关信息

javascript - 手机号码验证(国际)