Regex 如何使用Emacs正则表达式匹配模式后的线条部分

Regex 如何使用Emacs正则表达式匹配模式后的线条部分,regex,emacs,elisp,Regex,Emacs,Elisp,下面几行如何匹配单词dog和cat The dog The cat 行开头的单词(“The”)保持不变。 单词“狗”和“猫”会发生变化,这是要匹配的单词 正则表达式应与单词“The”后的单词匹配,而不是“The”。这应该是您想要的: The \(\w+\) 之后的单词是\1组 在elisp中,这是 (replace-regexp "\\(\\w+\\)" "\\1") Emacs regexp不支持零宽度断言,因此如果前面的文本对模式至关重要,那么您无法避免匹配它 当然,您可以使用分组来

下面几行如何匹配单词dog和cat

The dog

The cat
行开头的单词(“The”)保持不变。 单词“狗”和“猫”会发生变化,这是要匹配的单词


正则表达式应与单词“The”后的单词匹配,而不是“The”。

这应该是您想要的:

The \(\w+\)
之后的单词是
\1

在elisp中,这是

(replace-regexp "\\(\\w+\\)" "\\1")

Emacs regexp不支持零宽度断言,因此如果前面的文本对模式至关重要,那么您无法避免匹配它


当然,您可以使用分组来分离匹配字符串中您感兴趣的部分(根据Michael Markert的回答)。

您能否澄清您的问题:它总是只匹配“狗”还是“猫”?前面的单词是否总是“the”?换句话说,你能概括你的问题吗?你应该澄清你所说的是以交互方式搜索regexp,例如使用
M-x replace regexp
还是以编程方式搜索。如果是后者,Michael Markert的答案将对您有所帮助。正则表达式在程序中使用,而不是交互方式。只需添加一点信息,在程序中它应该用作“\(\\w+\)”和“\\1”。这不对:在字符串中它必须是“\(\\w+\)”和“\\1”。只是“\”(“将被评估为“(”)。再想一想:你可能是因为逃跑而被咬了,我把它添加到了答案中。