Regex 我需要帮助从链轮解码这个正则表达式
我需要帮助从链轮解码这个正则表达式。我不确定这符合什么,但如果有人给我一些提示或起点Regex 我需要帮助从链轮解码这个正则表达式,regex,ruby-on-rails-3,sprockets,Regex,Ruby On Rails 3,Sprockets,我需要帮助从链轮解码这个正则表达式。我不确定这符合什么,但如果有人给我一些提示或起点 HEADER_PATTERN = / \A ( (?m:\s*) ( (\/\* (?m:.*?) \*\/) | (\#\#\# (?m:.*?) \#\#\#) | (\/\/ .* \n?)+ | (\# .* \n?)+ ) )+ /x (?m:…)允许此子表达式中的点也匹配通常不匹配的换行符。(这是Ruby的特色;几乎所有其他正则表达式都使用(?s:…)) 因此,这
HEADER_PATTERN = /
\A (
(?m:\s*) (
(\/\* (?m:.*?) \*\/) |
(\#\#\# (?m:.*?) \#\#\#) |
(\/\/ .* \n?)+ |
(\# .* \n?)+
)
)+
/x
(?m:…)
允许此子表达式中的点也匹配通常不匹配的换行符。(这是Ruby的特色;几乎所有其他正则表达式都使用(?s:…)
)
因此,这个正则表达式似乎匹配文件/字符串开头的块注释或行注释
\A
(?m:…)
允许此子表达式中的点也匹配通常不匹配的换行符。(这是Ruby的特色;几乎所有其他正则表达式都使用(?s:…)
)
因此,这个正则表达式似乎匹配文件/字符串开头的块注释或行注释
\A
锚定到字符串的开头
(
启动包装整个字符串的组。它以)+
结尾,因此它匹配一个或多个实例
(?m:\s*)
启用此原子的多行标志,并匹配零个或多个“空格”字符(例如空格、垂直制表符、水平制表符、换行符或回车符)。我不知道他们为什么在这里打开多行标志,因为这不会影响\s
转义
(\/\* (?m:.*?) \*\/)
第一位\/
与/
字符匹配(转义,因为/
是正则表达式的分隔符)<代码>\*与*
字符匹配。由于使用了x
修饰符,因此可以忽略空格。然后它再次为*?
打开多行标志,使
匹配换行符。这里的?
使*
修饰符不贪婪,因此它匹配任何字符,但只匹配使其余模式匹配所需的数量。接着是一个*
,和一个/
。换句话说,它与C风格的注释相匹配(/*text*/
)
或
匹配由####
包围的任何文本,例如######
。再次将多行修饰符与
一起使用,并使用非贪婪匹配,以便在
匹配某个内容时停止匹配。由于使用了x
修饰符,因此对#
字符进行了转义
或
匹配/
,后跟任意文本,后跟可选换行符。我想换行符是可选的,以防这是字符串的结尾。缺少多行修改器使得
与换行符不匹配。这基本上与/
匹配,后跟任何内容,直到行尾
或
匹配#
,后跟任意文本,后跟可选换行符。与前面的模式相同,但使用#
而不是/
。请注意,较早的###
模式优先,因为它较早,因此如果文本与##
模式匹配,则不会与此模式匹配
最后,整个过程都使用了x
修饰符,因此模式中的空格、换行符和#
之后的任何文本都将被忽略(这就是它跨多行写入的原因)。这只是为了可读性
锚定到字符串的开头
(
启动包装整个字符串的组。它以)+
结尾,因此它匹配一个或多个实例
(?m:\s*)
启用此原子的多行标志,并匹配零个或多个“空格”字符(例如空格、垂直制表符、水平制表符、换行符或回车符)。我不知道他们为什么在这里打开多行标志,因为这不会影响\s
转义
(\/\* (?m:.*?) \*\/)
第一位\/
与/
字符匹配(转义,因为/
是正则表达式的分隔符)<代码>\*与*
字符匹配。由于使用了x
修饰符,因此可以忽略空格。然后它再次为*?
打开多行标志,使
匹配换行符。这里的?
使*
修饰符不贪婪,因此它匹配任何字符,但只匹配使其余模式匹配所需的数量。接着是一个*
,和一个/
。换句话说,它与C风格的注释相匹配(/*text*/
)
或
匹配由####
包围的任何文本,例如######
。再次将多行修饰符与
一起使用,并使用非贪婪匹配,以便在
匹配某个内容时停止匹配。由于使用了x
修饰符,因此对#
字符进行了转义
或
匹配/
,后跟任意文本,后跟可选换行符。我想换行符是可选的,以防这是字符串的结尾。缺少多行修改器使得
与换行符不匹配。这基本上与/
匹配,后跟任何内容,直到行尾
或
匹配#
,后跟任意文本,后跟可选换行符。与前面的模式相同,但使用#
而不是/
。请注意,较早的###
模式优先,因为它较早,因此如果文本与##
模式匹配,则不会与此模式匹配
最后,整个过程都使用了
x
修饰符,因此模式中的空格、换行符和#
之后的任何文本都将被忽略(这就是它跨多行写入的原因)。这只是为了可读性。@TimPietzcker:是的,但是第一个原子是(?m:\s*)
,它没有点。我在(?m:…)
的第二个用法中提到,多行标志使
匹配换行符,这在这里是有意义的,但是\s*
不受此标志的影响。@TimPietzcker:是的,但是第一个原子是(?m:\s*)
,它没有点。我在(?m:…)
的第二个用法中提到了多行标志
(\/\/ .* \n?)+
|
(\# .* \n?)+