0

我正在写一些正则表达式代码。我怎样才能只搜索字符串出现在文本中的第一个实例。例如,如果我想搜索出现在文本中的第一个数字(我不关心其他数字,也不希望它们突出显示),我如何在 Regex 中指定它?

我正在编写原始 Regex 代码并在 Rubular.com 和 regexpal.com 等在线测试仪上对其进行测试。

4

2 回答 2

1

这就是正则表达式默认的工作方式,您通常必须提供全局选项或使用特定函数来查找所有匹配项。

因此,如果您要使用正则表达式\d+查找一个或多个数字,则正则表达式引擎将仅匹配第一组数字(第一个数字)。

请注意,如果您使用的是在线工具或文本编辑器而不是编程语言,则情况可能并非如此,因此如果这没有帮助,请指定您执行正则表达式搜索的方式。

您可以使用以下正则表达式来获取第一个捕获组中的第一个数字,并且不匹配其他任何内容:

^[^\d]*(\d+)

解释:

^         # start of string
[^\d]*    # match zero or more non-digit characters
(\d+)     # match one or more digits and place them in the first capture group
于 2012-08-27T23:43:50.340 回答
0

大多数使用正则表达式导向引擎的正则表达式工具总是返回最左边的匹配项。

正则表达式引擎总是返回最左边的匹配,因为引擎“渴望”报告匹配。引擎永远不会超过这一点来查看是否有任何“更好”的匹配。第一场比赛被认为足够好。

但是使用正则表达式引擎的工具(如 Notepad++、EditPad 和数百万其他工具)已将其配置为应突出显示所有匹配项。(这对文本编辑器很有意义)(对于大多数在线正则表达式测试人员也是如此)。

要解决您的问题,如果您使用 .NET Regex 库之类的 Regex 库,则可以使用Regex.Match获取第一个匹配的出现。
例如,在 C# 中:

string regexPattern = "\d";
string inputText = @"Ka3jf7we8ewdv"; 
Regex r = new Regex(regexPattern);
Match m = r.Match(inputText);
Console.WriteLine(m.Value);
于 2012-08-28T00:16:38.647 回答