我刚从一本关于 Ruby 语言中的正则表达式的书中了解到。我谷歌了它,但仍然对{x}
and感到困惑{x,y}
。
书上说:
{x}→匹配前面字符的 x 次出现。
{x,y}→匹配至少 x 次和最多 y 次。
谁能更好地解释这一点,或提供一些例子?
当然,看看这些例子:
http://rubular.com/r/sARHv0vf72
http://rubular.com/r/730Zo6rIls
/a{4}/
是以下的简短版本:
/aaaa/
它说:匹配 'a' 的 4 个(连续)字符。
在哪里
/a{2,4}/
说:匹配至少 2 个,最多 4 个字符的 'a'。
它会匹配
/aa/
/aaa/
/aaaa/
它不匹配
/a/
/aaaaa/
/xxx/
Limiting Repetition
很好的在线教程。
我强烈推荐regexbuddy.com并且非常简单地说,下面的正则表达式可以满足您的要求:
[0-9]{3}|\w{3}
[ ] 字符表示您必须匹配 0 到 9 之间的数字。它可以是任何值,但 [ ] 是文字匹配。内部带有 3 的 { } 表示匹配 0 到 9 之间的 3 个数字的集合。是一个或语句。\w 是任何单词字符的简写,{3} 再次只返回 3 个集合。
如果你去RegexPal.com你可以输入上面的代码并测试它。我使用以下数据来测试表达式:
909 steve kinzey
并且该表达式与 909、“ste”、“kin”和“zey”相匹配。它与“ve”不匹配,因为它只有 2 个单词字符长,并且一个单词字符不跨越空格,因此它不能延续到第二个单词。
GNU awk 在其手册的Regexp Operators部分将这些称为“区间表达式” 。它解释如下表达式:
{n}
{n,}
{n,m}
大括号内的一个或两个数字表示一个区间表达式。如果大括号中有一个数字,则前面的正则表达式重复 n 次。如果有两个用逗号分隔的数字,则前面的正则表达式重复 n 到 m 次。如果有一个数字后跟一个逗号,则前面的正则表达式至少重复 n 次:
该手册还包括以下参考示例:
wh{3}y
Matches ‘whhhy’, but not ‘why’ or ‘whhhhy’.
wh{3,5}y
Matches ‘whhhy’, ‘whhhhy’, or ‘whhhhhy’, only.
wh{2,}y
Matches ‘whhy’ or ‘whhhy’, and so on.