Lisp regexp匹配带或不带常量类型标识符的数字(3.2或3.2f)

时间:2012-06-12 14:44:14

标签: regex emacs numbers lisp font-lock

问题: 我想在emacs中创建一个数字字体锁面,​​但是我无法获得符合我需要的正则表达式。这就是我所拥有的:

"\\<\\([0-9]*\\.?[0-9]*\\)+\\(d\\|f\\)?\\>"

我希望它匹配:

  1. 2
  2. 2.1
  3. 2.1f或2.1d
  4. .1f或.1d
  5. 我不希望它匹配

    1. 2
    2. 2.f或2.d
    3. f或d
    4. 当前问题:

      目前它主要起作用,但它与.2或.2f之类的数字不匹配,因为它在数字之前没有拾取(。)。它目前还在代码中的任何位置匹配单个“f”或“d”,因此变量名称为f或d匹配。我在这里错过了什么?在过去一周左右的每个午休时间,我都在摆弄这个,我很难过。

1 个答案:

答案 0 :(得分:2)

您可以使用这样的正则表达式(PCRE语法):

(\d*\.\d+|\d+)[fd]?

(根据需要锚定它。)

转换为Emacs样式正则表达式(Jon O):

"\\<\\([0-9]*\\.[0-9]+\\|[0-9]+\\)[df]?\\>"