我想太多的兄弟看过 Thinking in java 了吧!大家是不是看过 I/O 里面的正则表达式。
我是实在理解不了正则表达式的 数量表示符
Greedy Reluctant Possessive 匹配
X? X?? X?+ 匹配一个或零个X
X* X*? X*+ 匹配零或多个X
X+ X+? X++ 匹配一个或多个X
X{n} X{n}? X{n}+ 匹配正好n个X
X{n,} X{n,}? X{n,}+ 匹配至少n个X
X{n,m} X{n,m}? X{n,m}+ 匹配至少n个,至多m个X
这个东西有什么用处那。我们在写的时候如果写一个问号 X? ,那好,这表示。我要求X出现0或者1次。那么我写两个问号 X?? 是什么意思那.难道也是“我要求X出现0或者1次”
我是实在理解不了正则表达式的 数量表示符
Greedy Reluctant Possessive 匹配
X? X?? X?+ 匹配一个或零个X
X* X*? X*+ 匹配零或多个X
X+ X+? X++ 匹配一个或多个X
X{n} X{n}? X{n}+ 匹配正好n个X
X{n,} X{n,}? X{n,}+ 匹配至少n个X
X{n,m} X{n,m}? X{n,m}+ 匹配至少n个,至多m个X
这个东西有什么用处那。我们在写的时候如果写一个问号 X? ,那好,这表示。我要求X出现0或者1次。那么我写两个问号 X?? 是什么意思那.难道也是“我要求X出现0或者1次”
X? 表示这个正则表达式是greedy的,再加一个?表示这个是reluctant的,加+号的话就表示是possessive的,下面是java turoials 里的例子
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.第一个是greedy的,表示它的匹配过程是,先尝试把整个xfooxxxxxxfoo,匹配.*,显然成功,但是后面没有foo了,所以匹配.*成功,但是匹配.*foo不成功,于是它退一个字符,把xfooxxxxxxfo与.*匹配,当然成功,但是匹配.*foo又不成功,再退一个字符xfooxxxxxxf,把xfooxxxxxxf与.*匹配,当然成功,但是匹配.*foo又不成功,再退一个,这次成功了,至于为什么,自己想一想.它的过程就是从后往前退字符,所以只能匹配到一个xfooxxxxxxfoo第二个是reluctant的,表示它的匹配过程是,先尝试用空串匹配,匹配.*,显然成功,但是后面还有xfooxxxxxxfoo,不能匹配foo,所以不成功.于是,它加一个字符(和前面不同,前面是减一个,这是加一个),x匹配.*,显然成功,但是后面还有fooxxxxxxfoo,不能匹配foo,所以不成功.继续这个过程,可以找到两个匹配xfoo,xxxxxxfoo,自己分析一下这两个如何成功的第三个是possessive的,它和greedy一样,先把整个串吃了,但是不同的是,它不退字符了,也就是说,它只尝试一次,所以没找到任何匹配讲解完毕
等到了
认真看中………………
谢谢 XXKKFF(讠古 钅)
a{n}? 不可以解释为(a{n})?
{n}? 这个符号就像是 1 个符号--比方说 *-- 一样,绝对不可以把它分割开来因为在正则表达式中 {n}? 表达的意思是:“我就是一个单独的,正则表达式中的,特殊符号,而且如果你用到我,那么你在匹配器中搜索时就要采用这种方式:从左向右搜索”