简单,我想看看一个字段是否有9位数字,没有别的。perl正则表达式使用重复/量词
我是$ var = 123456789
(my $nine) = ($var =~ /\d{9}/);
从我的理解这个说, “匹配一个数字的9倍,并没有别的”
这个输出1
但不是我期待的123456789
。为什么?
简单,我想看看一个字段是否有9位数字,没有别的。perl正则表达式使用重复/量词
我是$ var = 123456789
(my $nine) = ($var =~ /\d{9}/);
从我的理解这个说, “匹配一个数字的9倍,并没有别的”
这个输出1
但不是我期待的123456789
。为什么?
没有什么回来在列表环境正则表达式中,
所以默认是它将变量$nine
设置为正则表达式函数调用的标量结果
。并且该函数调用返回标量上下文
匹配的数量。
如果你要改变,要(my $nine) = ($var =~ /\d/g);
$其中9含有9
添加捕获缓冲围绕数字。
即:
(my $nine) = ($var =~ /(\d{9})/);
然而,即使你对你的赋值语法将工作,
其传统的把它写为
my ($nine) = $var =~ /(\d{9})/;
我是谁低估了你的答案的白痴。你错了。 – Borodin 2014-11-23 23:06:05
谢谢。你的工作是为了我的需要。 – 2014-11-23 23:17:21
你真的想这样:
(my $nine) = ($var =~ /(\d{9})/);
的问题是,=~
是一个比较运营商,并表达($var =~ /\d{9}/)
的结果为真(1)。在我的例子中添加括号使得正则表达式捕捉到它的匹配,所以它返回你的123456789
你的格局九(国际)数字字符任何地方序列中的字符串相匹配。您所看到的1
是一个true模式匹配返回的值说匹配成功。
如果你只是想验证一个变量的内容是正是 9 ASCII数字,那么你应该写
if ($var =~ /\A[0-9]{9}\z/) { ... }
,或者,如果您有可用的ASCII /a
修饰符(任意版本Perl 5中的自14),那么你可以说
if ($var =~ /\A\d{9}\z/a) { ... }
,你表现出“产出”什么声明。你期望'九美元'包含'123456789'吗?如果'$ var'设置为''abcdef9873239998782116tyra'',你想要什么? – Borodin 2014-11-23 23:13:43