在正则表达式组中问号和x的含义

时间:2015-09-25 13:56:40

标签: regex syntax-highlighting textmate atom-editor

我正在尝试学习Atom的语法高亮/语法规则,这些规则大量使用JS正则表达式,并在python grammar file中遇到了一个不熟悉的模式。

模式以(?x)开头,这对我来说是一个不熟悉的正则表达式。我在online regex tester中查了一下,似乎说这是无效的。我最初的想法是它代表了一个可选的左派,但我相信这些人应该在这里逃脱。

这只在Atom的coffeescript语法中有意义,还是我忽略了正则表达式的意思?

(此模式也出现在我认为Atom来自的textmate language文件中。

2 个答案:

答案 0 :(得分:2)

如果在Python中处理该正则表达式,它将使用'verbose'标志进行编译。

来自the Python re docs

  

(?aiLmsux)

     

(来自'a','i','L','m','s'的一个或多个字母,   'u','x'。)该组匹配空字符串;这些字母设定了   相应的标志:re.A(仅限ASCII匹配),re.I(忽略大小写),   re.L(依赖于语言环境),re.M(多行),re.S(点匹配全部),   和 re.X(详细),用于整个正则表达式。 (旗帜是   在模块内容中描述。)如果您想要包含,这很有用   标志作为正则表达式的一部分,而不是传递标志   re.compile()函数的参数。

答案 1 :(得分:1)

JavaScript正则表达式引擎不支持 VERBOSE 修饰符x,既不支持内联也不支持常规修饰符。

请参阅rexegg.com上的Free-Spacing: x (except JavaScript)

  

默认情况下,正则表达式字符串中的任何空格都指定要匹配的字符。在可以在多行上编写正则表达式字符串的语言中,换行符还指定要匹配的文字字符。因为你不能将空格插入到具有不同含义的单独组中(正如你用英语写的那样在短语和pragraph之间),正则表达式可能变得难以阅读......

     

幸运的是,许多引擎支持自由间距模式,允许您对正则表达式进行通气。例如,您可以在令牌之间添加空格。

     

您可能还会看到它名为空白模式评论模式详细模式。

以下是how it can look like in Python

import re
regex = r"""(?x)
\d+                # Digits
\D+                # Non-digits up to...
$                  # The end of string
"""
print(re.search(regex, "My value: 56%").group(0)) # => 56%