n.r*_*.r. 8 perl regex-lookarounds
如何将下一个搜索位置的开头倒数1?例如,假设我想匹配之间的所有数字#.以下将只给我奇数.
my $data="#1#2#3#4#";
while ( $data =~ /#(\d)#/g ) {
print $1, "\n";
}
Run Code Online (Sandbox Code Playgroud)
但是如果我能够将下一个位置的开始倒数1,我会得到偶数和奇数.
这不起作用: pos() = pos() - 1;
我知道我可以用它完成这个任务split.但这不能回答我的问题.
for (split /#/, $data) {
print $_, "\n";
}
Run Code Online (Sandbox Code Playgroud)
mob*_*mob 12
一种方法是使用前瞻性断言:
while ( $data =~ /#(\d)(?=#)/g ) {
print $1, "\n";
}
Run Code Online (Sandbox Code Playgroud)
前瞻断言中的字符不是匹配表达式的一部分,并且不会更新pos()超出\d正则表达式的部分.
更多演示:
say "#1#2#3#4#" =~ /#(\d)/g; # 1234
say "#1#2#3#4" =~ /#(\d)/g; # 1234
say "#1#2#3#4#" =~ /#(\d)(?=#)/g; # 1234
say "#1#2#3#4" =~ /#(\d)(?=#)/g; # 123
Run Code Online (Sandbox Code Playgroud)
你打电话pos()的$_,而不是$data
从 perldoc
返回最后一个m // g搜索为相关变量留下的偏移量(当未指定变量时使用$ _)
所以,
pos($data) = pos($data) - 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |