Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Regex Emacs-子词正则表达式说明_Regex_Emacs_Elisp - Fatal编程技术网

Regex Emacs-子词正则表达式说明

Regex Emacs-子词正则表达式说明,regex,emacs,elisp,Regex,Emacs,Elisp,我试图更改子字模式命令(子字前进、子字后退等)停止的位置 我注意到subword.el提供了用于向前和向后匹配的正则表达式,我一直在尝试在添加更多子词分隔符方面取得一些进展 我真正想要的是澄清子词正则表达式到底是如何工作的,只要匹配的是什么,这样我就可以将其更改为包含我想要停止的字符。我对正则表达式有一个基本的了解,以前也使用过,但从来没有像subword.el中那样大 对于这两个正则表达式,我也不一定需要帮助。对于向现有正则表达式中的一个添加额外分隔符的任何指导,我都同样感激,因为这是我更改它

我试图更改子字模式命令(子字前进、子字后退等)停止的位置

我注意到subword.el提供了用于向前和向后匹配的正则表达式,我一直在尝试在添加更多子词分隔符方面取得一些进展

我真正想要的是澄清子词正则表达式到底是如何工作的,只要匹配的是什么,这样我就可以将其更改为包含我想要停止的字符。我对正则表达式有一个基本的了解,以前也使用过,但从来没有像subword.el中那样大

对于这两个正则表达式,我也不一定需要帮助。对于向现有正则表达式中的一个添加额外分隔符的任何指导,我都同样感激,因为这是我更改它们的目标,但我真的很想了解一下正则表达式是如何设置的

最后,在寻找解决方案时,我发现。我仔细阅读了一遍,但是subword.el并不包含正则表达式本身,因为它似乎出现在相关问题的引用部分,我不理解引用部分中最后一个附加语句的含义

编辑:

为了让我想做的事情更加清晰,我只希望Emacs中的Ctrl+Left/Right(子词forward/backward)尽可能接近Eclipse,因为我希望光标以类似的方式移动,在到达Ctrl+Left/Right的行的末尾和开头停止

。“viper”命令与我要查找的命令非常接近,但有点偏离,因为我希望该点在继续下一行之前停止在该行的末尾

  • 最后一段中问题的答案包含在同一链接页面的另一个答案中:
    (修改语法条目?\\“w”)
    。这使得反斜杠成为单词的组成字符,因此单词函数将其视为单词的一部分

  • 请指定您试图实现的行为,特别是“添加更多子词分隔符”的含义

  • subword.el
    中的regexp非常简单。您说您不需要帮助理解这些regexp。但是你问“子词正则表达式到底是如何构造的”是什么意思呢?它们很可能是手工建造的(基于您已经了解它们的各个部分的用途)

  • 由于到目前为止我还不清楚您的描述,所以我猜测您所要寻找的只是指定一些额外的字符,作为具有非单词语法的字符。如果这就是“添加更多子词分隔符”的意思,那么就这么做吧。例如,如果希望char
    a
    为非单词字符,请执行以下操作:

    (修改语法条目?a“);或另一个非单词成分语法类(使用标点符号)

    这使得
    a
    成为标点字符而不是单词组成字符。如果您需要标点符号以外的其他语法类,请选择类似的语法类


  • 评论后更新

    例如,如果您希望任何标点符号语法与大写字母的作用相同,则可以这样做:

    (defvar subword-forward-regexp
      "\\W*\\(\\(\\([[:upper:]]\\|\\s.\\)*\\(\\W\\)?\\)[[:lower:][:digit:]]*\\)"
      "Regexp used by `subword-forward-internal'.")
    
    (defvar subword-backward-regexp
      "\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\(\\([[:upper:]]\\|\\s.\\)+\\W*\\)\\|\\W\\w+\\)"
      "Regexp used by `subword-backward-internal'.")
    
    或者,如果您希望,比如说,,与大写字母的作用相同,则可以这样做:

    (defvar subword-forward-regexp
      "\\W*\\(\\([,[:upper:]]*\\(\\W\\)?\\)[[:lower:][:digit:]]*\\)"
      "Regexp used by `subword-forward-internal'.")
    
    (defvar subword-backward-regexp
      "\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([,[:upper:]]+\\W*\\)\\|\\W\\w+\\)"
      "Regexp used by `subword-backward-internal'.")
    

    如果这仍然不是你想要的,那么试着更好地解释一下你想要什么。例如,你没有举过一个例子——既没有正面的(应该到此为止),也没有负面的(不应该到此为止)。你让那些试图帮助你的人猜得比他们应该猜的更多,这是没有效率的。

    对不起,让我试着澄清一下自己。总的来说,我所说的“定界”是指我想更改regexp,以便它们在附加字符上停止,例如符号、括号等。就单词/非单词差异而言,我是否应该将我想停止的字符更改为单词字符?您所说的“停止”是什么意思?如果您不希望字符被视为单词或子单词的一部分,那么请为其提供非单词语法。例如,如果您希望将其视为启动子字的字符,就像大写字母一样,那么请遵循当前子字代码中如何处理
    [:upper://code>,例如,让regexp执行
    [:upper://code>或您的字符,等,我已经添加了额外的信息,以原来的职位只是意味着结果,我想要的。对于“stop on”,我打算让子词函数起作用,这样,除了单词中的大写字母外,点将“stop”或移动到字符,如括号、引号、行的开头和结尾。请注意,对于更复杂的子词模式自定义,您可以定义替代函数以分配给
    子字向前函数
    子字向后函数
    变量。如果您正在考虑更改任意字符的语法,只是为了从子字模式中获得不同的行为,那么您可能会发现基于函数的方法不太像黑客。下面是一个指向线程的链接,其中包含一个示例,您可以修改该示例以适应您喜欢的行为。由于某些主要模式会更改语法表,因此您需要为通常使用的任何模式编写异常: