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

如何在重复的反向引用中获得所有匹配项?[副本]

罗俭
2023-03-14

使用测试字符串:

This is a string1 string2 string3 string4 string5 string6 string7 so it is.

是否可以将所有StringX作为反向引用?目前,我尝试的内容每次都会被覆盖,因此我最终会得到一个匹配项,即最后一个匹配项。

例如使用这样的正则表达式:

/This is a (?:(string\d) )+so it is./

最后总是以string7的匹配结束。

到目前为止,我发现的最好的方法是删除上面的?:并在空格上爆炸,但我对是否有一种方法可以纯粹使用正则表达式来做到这一点很感兴趣。

专门更新PHP,实现这一点的最佳方法是什么?

共有1个答案

慕宏峻
2023-03-14

您可以使用以下方式使用此正则表达式:

(?:This is a|\G(?!\A))\h+((?=.*so it is\.)string\d+)
  • \G在上一个匹配的末尾或第一个匹配的字符串的开头断言位置
  • (?!\A)是负前瞻,以断言我们在行首不匹配\G
  • (? =.*so it is\.)是积极的前瞻,以断言我们有so it is.在输入中领先于当前位置

RegEx演示

代码:

$re = '/(?:This is a|\G(?!\A))\h+((?=.*so it is\.)string\d+)/m';
$str = 'This is a string1 string2 string3 string4 string5 string6 string7 so it is.';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches[1]);
 类似资料:
  • 我有一份可能有出口问题的项目清单。我想得到一个重复项目的列表,这样我就可以手动比较它们。当我尝试使用熊猫复制方法时,它只返回第一个副本。有没有办法得到所有的副本,而不仅仅是第一个? 我的数据集的一小部分如下所示: 我的代码目前看起来像这样: 有两个重复的项目。但是,当我使用上面的代码时,我只得到第一项。在API参考中,我看到了如何获得最后一项,但我希望获得所有这些项,以便我可以直观地检查它们,以了

  • 在我的例子中,abc或def是一个很长的搜索时间,如果我必须更改regex,我必须在这两个地方都更改。有没有什么方法可以在没有记忆的情况下回指这个群体? https://regex101.com/r/bl9wu1/1

  • 问题内容: 我想将所有不匹配的URL重定向到我的主页。就是 有人去或-我想将他们重定向到 显然,我不想干扰我的有效网址。 那么,是否可以使用一些通配符匹配器将请求重定向到这些无效的url? 问题答案: 您可以在Express链中插入“全部捕获”中间件作为最后一个中间件/路由: 我使用这样的设置来生成自定义页面。

  • 问题内容: 如何替换字符串中所有出现的内容? 如果要替换字符串中的所有换行符(\ n)。 这只会替换第一次出现的换行符 我不知道该怎么做? 问题答案: 使用全局标志。

  • 我正在iOS和Android上自动运行我们的移动应用程序。当我得到搜索结果(元素列表)时,我希望遍历与xpath匹配的所有元素。 问题是-Appium只返回那些在视口中可见的元素,这是有意义的。但是,我希望所有元素都与我的xpath/locator策略匹配,尽管这些元素不在视口中。要获得更多的元素集,我必须滚动到这些元素并将它们放入视口。 appium是否提供了任何配置来启用此功能?或者在访问之前