我尝试使用perl中的regex从字符串中提取文本和数字。这是我的代码:
$line = "finish=100\n";
($var) = $line =~ /[a-z]+/;
($val) = $line =~ /[0-9]+/;
我的预期输出是$ var ="完成"和$ val = 100.但是当我运行代码$ var = 1和$ val = 1时。
任何帮助都将不胜感激!!
答案 0 :(得分:4)
在正则表达式中使用捕获括号:
<distributionManagement>
<repository>
<id>test</id>
<url>Repo path</url>
</repository>
</distributionManagement>
请参阅perlre
答案 1 :(得分:1)
列表上下文中的正则表达式匹配(正则表达式不使用/g
标志)返回
$1, $2, ...
)如果成功且模式包含捕获组1
如果成功且模式没有捕获任何内容您的正则表达式匹配,但它们不包含任何捕获组,这就是您在1
和$var
中获得$val
的原因。
如果添加捕获组(/([a-z]+)/
,/([0-9]+)/
),则会获得匹配的子字符串。
请注意,在一场比赛中完成所有操作可能会更容易:
my ($var, $val) = $line =~ /^([a-z]+)=([0-9]+)$/;
通过这种方式,您还可以验证输入字符串是否具有预期的格式,并且不仅仅是"Cat o' 9 tails"
,而(使用您的原始正则表达式)将提取$var = "at"
和{{1} }。
答案 2 :(得分:0)
你也可以在一个数组中得到两个值,也许用这个:
$val = "9"