正则表达式:为啥前后都匹配,合起来却不能匹配
我用ruby进行正则表达式匹配,过程如下:
前面部分:
> reg1 = %r{\A(//(.+)\n)?}
=> /\A(\/\/(.+)\n)?/
> reg1 =~ "//;\n"
=> 0
> $2
=> ";"
后面部分:
> reg2 = %r{\A(-?\d+([;|,|\n]-?\d+)*)\z}
=> /\A(-?\d+([;|,|\n]-?\d+)*)\z/
> reg2 =~ "1;3"
=> 0
合起来:
> reg = %r{\A(//(.+)\n)?(-?\d+([\2|,|\n]-?\d+)*)\z}
=> /\A(\/\/(.+)\n)?(-?\d+([\2|,|\n]-?\d+)*)\z/
> reg =~ "//;\n1;3"
=> nil
请问为啥前面部分和后面部分分开能匹配上,而合起来却匹配不上了呢?
前面部分:
> reg1 = %r{\A(//(.+)\n)?}
=> /\A(\/\/(.+)\n)?/
> reg1 =~ "//;\n"
=> 0
> $2
=> ";"
后面部分:
> reg2 = %r{\A(-?\d+([;|,|\n]-?\d+)*)\z}
=> /\A(-?\d+([;|,|\n]-?\d+)*)\z/
> reg2 =~ "1;3"
=> 0
合起来:
> reg = %r{\A(//(.+)\n)?(-?\d+([\2|,|\n]-?\d+)*)\z}
=> /\A(\/\/(.+)\n)?(-?\d+([\2|,|\n]-?\d+)*)\z/
> reg =~ "//;\n1;3"
=> nil
请问为啥前面部分和后面部分分开能匹配上,而合起来却匹配不上了呢?
...全文
相关推荐
正则表达式个人学习总结
#### 二、标准字符集合标准字符集合是指能够与多种字符匹配的表达式,它们是正则表达式中最常用的元素之一:- `\d`:匹配任意一个数字(0-9)。- `\D`:匹配非数字的任意字符。
Linux中基本正则表达式
- \<PATTERN\>表示匹配一个完整单词,即PATTERN前后不能有其他字母或数字。基本正则表达式在很多文本处理工具中都有应用,如grep、sed、awk等。
PHP正则表达式入门教程(推荐)
e)/" 则表示匹配字符"d",且"d"前面不能紧跟字符"c",后面也不能紧跟字符"e"。正则表达式虽然功能强大,但过于复杂的正则表达式可能会导致代码难以理解。
正则表达式30分钟入门教程
负向零宽断言- **负向零宽断言**:`(?!...)`,与正向零宽断言相反,用于检测其右侧的表达式是否无法成功匹配。- **示例**:`a(?!b)`匹配`a`字符,但要求其后面不能紧跟`b`。
linux查看匹配内容的前后几行方法
如果要查看匹配内容的前后行,可以使用`grep`的一些特殊选项:1. `-n` 选项:显示匹配行的行号。


Google技术社区
