Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用regexp搜索=,而不是>;=,=<;=,!=,~=,等等,在Emacs中?_Regex_Emacs - Fatal编程技术网

如何使用regexp搜索=,而不是>;=,=<;=,!=,~=,等等,在Emacs中?

如何使用regexp搜索=,而不是>;=,=<;=,!=,~=,等等,在Emacs中?,regex,emacs,Regex,Emacs,我想对=字符执行regexp搜索,该字符的两边可能有空格,也可能没有空格,并且可能在一行的开头或结尾。我试过几次: =不起作用,因为它与=、=等匹配 [^=]=[^=]不起作用,因为它捕获了=字符前后的两个字符,这是不需要的 我认为\\可能有用,但我不知道它们是干什么用的 在Vim中,有\zs和\ze表示匹配的开始和结束,因此我只能针对上下文匹配周围的字符。但Emacs没有这些 这在Emacs中可能吗?您的问题没有明确说明。在=前后,您不允许使用哪些字符?您允许空格字符(其他空格呢?)。但是

我想对
=
字符执行regexp搜索,该字符的两边可能有空格,也可能没有空格,并且可能在一行的开头或结尾。我试过几次:

  • =
    不起作用,因为它与
    =
    =
    等匹配
  • [^=]=[^=]
    不起作用,因为它捕获了
    =
    字符前后的两个字符,这是不需要的
  • 我认为
    \\
    可能有用,但我不知道它们是干什么用的
在Vim中,有
\zs
\ze
表示匹配的开始和结束,因此我只能针对上下文匹配周围的字符。但Emacs没有这些


这在Emacs中可能吗?

您的问题没有明确说明。在
=
前后,您不允许使用哪些字符?您允许空格字符(其他空格呢?)。但是您是否只允许空格字符(或空格)

例如,您是否允许
a=b
匹配?如果是这样的话,那么也许信件是不被禁止的

一旦明确指定了在
=
前后允许和不允许的字符,就可以编写regexp。但是,由于您希望在匹配上下文中仅“捕获”
=
,因此需要对
=
使用regexp组,并在匹配所有内容后仅检索它匹配的内容

例如,
[]*=[]*
匹配可能由空格字符包围的
=
。但是如果您只想在该上下文中捕获
=
,那么您需要使用
[]*\\(=\\)[]*
,然后使用
(匹配字符串1)
来获取
=

您也不会说是匹配缓冲区中的文本还是字符串中的文本

你不需要说你是想通过交互方式还是通过Lisp程序来实现

您需要的确切代码取决于这些内容。如果以交互方式进行搜索,则不需要重复反斜杠。如果是字符串而不是缓冲区,则需要将该字符串作为第二个参数传递给
匹配字符串


一般来说,您的问题没有明确说明,答案包括指定这些内容,特别是您想要匹配的上下文(在
=
之前和之后允许哪些字符)以及您想要检索的匹配上下文的哪些部分(只有
=
=
加上前面和后面的一些字符)。

你的问题没有明确说明。在
=
前面和后面你不允许哪些字符?你允许空格字符(其他空格呢?)。但是你只允许空格字符(或空格)吗

例如,您是否允许
a=b
匹配?如果允许,则可能不允许使用字母

一旦您明确指定了在
=
前后允许和不允许的字符,您就可以编写regexp。但是,由于您希望在匹配上下文中仅“捕获”
=
,您需要为
=
使用regexp组,并在匹配所有内容后仅检索它匹配的内容

例如,
[]*=[]*
匹配可能由空格字符包围的
=
。但是如果您只想在该上下文中捕获
=
,则需要使用
[]*\(=\\)[]*
,然后使用
(匹配字符串1)
来获取
=/code>

您也不会说是匹配缓冲区中的文本还是字符串中的文本

你不需要说你是想通过交互方式还是通过Lisp程序来实现

所需的确切代码取决于这些因素。如果以交互方式(例如,为了搜索),则不需要双反斜杠。如果是字符串而不是缓冲区,则需要将该字符串作为第二个参数传递给
匹配字符串


一般来说,您的问题没有明确说明,答案包括指定这些内容,特别是您想要匹配的上下文(在
=
之前和之后允许哪些字符)以及您想要检索的匹配上下文的哪些部分(只有
=
=
加上前后的一些字符)。

在Emacs中,任何事情都是可能的。这对您不起作用?:
[^=!~]?=?[^=]
。您使用哪个命令进行搜索?@elethan它捕获的字符比我想要的还要多。我希望只捕获我说过的
=
。啊,是的,我以前读过,但现在我明白了您的意思。听起来您需要负向前看或向后看,我认为lisp regexps中不支持这些这就是我所记得的,但当我回到桌面时,我会研究它。elethan是正确的——在Emacs regexps中没有类似Perl的零宽度前瞻/后向断言,因此如果您还需要断言任一侧的某些字符,您不能编写只匹配
=
的regexp。正如Drew所说,您需要更新您的问题以向我们展示您正在尝试做什么,因为正确的解决方案将取决于上下文。关于您关于
\\\\
的问题,它们是零宽度断言,匹配符号的开头和结尾,其中符号是符号组成字符或单词组成字符的连续序列根据所讨论的缓冲区的语法表。还有其他类似的构造,如
\
\b
(与单词边界匹配)。我怀疑您需要弄乱语法表,以便这些对这个问题有帮助(这不是正确的解决方案)。在Emacs中,任何操作都是可能的。这对您不起作用?:
[^=!~]?=?[^=]
。您使用哪个命令来