当前位置: 首页 > 面试题库 >

正则表达式中'\ G'锚的用途是什么?

拓拔德馨
2023-03-14
问题内容

我很难理解\G锚在PHP形式的正则表达式中的工作方式。

我倾向于认为(即使我可能错了),\G而不是^在发生相同字符串的多次匹配的情况下使用。

有人可以举一个\G应该如何使用的例子,并解释它如何以及为什么起作用吗?


问题答案:

更新

\ G 强制模式仅返回作为连续匹配项链的一部分的匹配项。从第一个比赛开始,每个随后的比赛都必须在比赛之前。如果您打断链,比赛将结束。

<?php
$pattern = '#(match),#';
$subject = "match,match,match,match,not-match,match";

preg_match_all( $pattern, $subject, $matches );

//Will output match 5 times because it skips over not-match
foreach ( $matches[1] as $match ) {
    echo $match . '<br />';
}

echo '<br />';

$pattern = '#(\Gmatch),#';
$subject = "match,match,match,match,not-match,match";

preg_match_all( $pattern, $subject, $matches );

//Will only output match 4 times because at not-match the chain is broken
foreach ( $matches[1] as $match ) {
    echo $match . '<br />';
}
?>

这是直接从文档

反斜杠的第四种用法是用于某些简单的断言。断言指定匹配中特定点必须满足的条件,而不会消耗主题字符串中的任何字符。子模式用于更复杂的断言的描述如下。反斜杠断言是

 \G
    first matching position in subject

仅当当前匹配位置位于匹配的起点(由preg_match()的offset参数指定)时,\ G断言才为true。当offset的值非零时,它不同于\ A。

http://www.php.net/manual/zh/regexp.reference.escape.php

您将不得不向下滚动该页面,但是确实存在。

在ruby中有一个很好的例子,但是在php中也是如此。



 类似资料:
  • 问题内容: 正则表达式中标志的含义是什么? 和之间有什么区别? 问题答案: 用于全局搜索。这意味着它将匹配所有出现的事件。您通常还会看到这意味着忽略大小写。 “ g”标志指示应针对字符串中所有可能的匹配项测试正则表达式。 没有标志,它将仅测试第一个。

  • 问题内容: 以下代码是众所周知的将重音符转换为纯文本的代码: 我用这种方法代替了“手工制作”方法,但是我需要了解replaceAll的“ regex”部分 1)什么是“ InCombiningDiacriticalMarks”? 2)它的文档在哪里?(和类似的?) 谢谢。 问题答案: 是Unicode块属性。在JDK7中,您将可以使用两部分表示法来编写它,这对于读者来说可能更清楚。它在UAX#44

  • 这个正则表达式什么意思?这里$1代表什么?

  • 问题内容: 我在以下正则表达式中找到了它: 它将方括号(及其内容)与嵌套方括号匹配。 问题答案: 是一个字符类,表示除和以外的所有字符。 您可以避免转义和特殊字符,因为它对于PCRE(函数中使用的正则表达式引擎)不是模棱两可的。 由于在PCRE中不正确,因此正则表达式解析的唯一方法是在字符类内部,该字符类稍后将关闭。与以下相同。它不能重新打开字符类内的字符类(POSIX字符类除外)。然后最后一个清

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 问题内容: 非捕获组(即)在正则表达式中如何使用?它们有什么用? 问题答案: 让我尝试用一​​个例子来解释。 现在,如果我将下面的正则表达式应用于它… …我将得到以下结果: 但我不在乎协议-我只想要URL的主机和路径。因此,我将正则表达式更改为包括非捕获组(?:)。 现在,我的结果如下所示: 看到?第一组尚未被捕获。解析器使用它来匹配文本,但是稍后在最终结果中将其忽略。 编辑: 根据要求,我也尝试