当前位置: 首页 > 知识库问答 >
问题:

在一行中查找正则表达式的所有结果

邢思淼
2023-03-14

我的PHP脚本具有以下格式的函数i8n('content'),但我需要找到i8n中的所有字符串。

使用一些正则表达式,我设法获得了接近我想要的结果。

RegEx: i8n\('(.*)'\)
Content: i8n('First Message.');
Result: First Message.

对于这种情况,RegEx是完美的。当同一行上有其他内容并最终合并结果时,就会出现问题。

RegEx: i8n\('(.*)'\)
Content: logErrorUser(i8n('First Message.'), 500, date(), i8n('Second Message, same line.'));
Result: First Message.'), 500, date(), i8n('Second Message, same line.

我如何获得每一个单独?

共有1个答案

庄欣然
2023-03-14

您应该使用preg_match_all()函数并修改正则表达式:

  1. preg_match_all()将为您提供所有找到的结果;
  2. i8n\('(.*)'\)正则表达式中,您将捕获组与.*标记一起使用,这意味着任何字面含义。因此,它将返回I8N('字符串之后的所有符号。为了避免这种情况,您应该从捕获组中排除需要捕获的行的结尾,如下所示:I8N\('([^']*),这样它将返回I8N('子字符串之后和最近的'符号之前的所有符号。

UPD:您可以使用这个站点来构建您的regexp并实时测试它。此外,请注意preg_match_all()不会返回带有结果的数组,它只返回个完全模式匹配的数目(可能为零),如果发生错误则返回false

 类似资料:
  • 问题内容: 我正在解析的字符串中可能包含任意数量的带引号的字符串(我在解析代码,并尝试避免使用PLY)。我想找出是否有子字符串被引用,并且我有子字符串索引。我最初的想法是使用re查找所有匹配项,然后找出它们代表的索引范围。 似乎我应该将re与类似的正则表达式一起使用(目前,我避免使用三引号和此类字符串)。当我使用findall()时,会得到一个匹配字符串的列表,虽然有些不错,但我需要索引。 我的子

  • 在这个问题的背景下,我想做以下修改: 查找: funcA(参数0,参数1,参数2,参数3); 替换: funcA可以有除param0之外的任意数量的参数。怎么做呢?为简单起见,忽略基本情况,即当传递给funcA的参数仅为param0时。 funcA是: 职能是: 编辑: 参数(param1,param2..)只是包含字母的字符串。

  • 我对正则表达式很陌生,正在寻找一个匹配任何东西的表达式,除了所有匹配给定正则表达式的东西。我已经找到了除了特定字符串以外的任何东西的方法,但是我需要它不匹配一个正则表达式。它还必须在Java工作。 背景:我正在使用ANSI颜色的字符串。我想取一个字符串,它有一些文本,可能是用Ansi颜色代码格式化的,并删除除那些颜色代码以外的任何东西。这将给出附加到字符串上的任何字符的当前颜色格式。 格式化字符串

  • 问题内容: 我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是: 我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码: 但是,无论我尝试什么,每次返回的结果都是一片空白。 问题答案: 首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使

  • 这是与java正则表达式匹配的所有重叠子字符串的后续。 有没有办法让这段代码更快?

  • 问题内容: 我想查找没有重复数字的10位数字,例如: 目前,我正在使用正则表达式,但只能匹配10位数字(它不检查重复项。我正在使用此正则表达式: 可以使用正则表达式完成此操作,还是有更好的方法来实现此目的? 问题答案: 此正则表达式有效: 这使用锚定的否定前瞻和后向引用来断言没有重复的字符。 观看带有示例的现场演示。 在Java中: