在正则表达式中查找第一次出现的模式

时间:2013-04-22 17:06:59

标签: regex web-applications outsystems

如果我正在查看这样的文字:

hello bob hello hello hello

我想找到hello的第一个实例并将其取出,所以我使用这样的模式

hello

当我删除该模式时,这就是文本

bob

但我需要的是

bob hello hello hello

如何修改它以仅查找模式的第一个匹配项

2 个答案:

答案 0 :(得分:2)

我的水晶碗告诉我你在你的正则表达式中使用了某种global修饰符,如果你把它留下来,那么你应该得到你期望的结果。例如,在javascript中你会使用:

/hello/

而不是:

/hello/g

答案 1 :(得分:0)

在OutSystems中,正则表达式函数是通过扩展提供的,因此我假设您正在使用Text扩展名。扩展代码映射到.NET / Java代码,对正则表达式方法的底层调用是.NET Replace(string input, string replacement)和Java replaceAll(String replacement)。这些将替换给定输入字符串上所有出现的正则表达式。

现在,有几种解决问题的方法......

如果要在字符串的开头替换: 在您给出的示例中,您对删除感兴趣的 hello 也位于输入字符串的开头。在这种特殊情况下,您可以使用正则表达式,例如^hello

如果要替换第一个匹配项,请在字符串中的任何位置 如果您有兴趣替换第一个匹配项,但可以在输入字符串中的任何位置,那么您可以编写一个表达式,如hello(.*),并用作替换字符串$1。在这种情况下,$1表示捕获组(.*),其中包括 hello 的所有其他出现。这适用于.NETJava。当然,这种做事方式既不美观也不高效......

如果您想拥有更多正则表达式功能,您可以使用Integration Studio下载并打开文本扩展名并添加所需的任何新方法,但由于此扩展程序包含在平台中,可以用升级替换,我建议创建自己的扩展并使用Text扩展作为模板。您可以创建一个与当前Replace非常相似的扩展操作,但这可能需要额外的 count 参数或类似的参数。