我希望匹配格式为/.*/.*
的字符串,其中/
可以是斜杠或其他字符,并获取分隔符之间的所有字符。此外,如果这个特殊字符被反斜杠,它不算作分隔符。
例如,如果输入字符串为/sr\/gs/wfd/
,我想获得sr\/gs
。
我到目前为止的尝试如下(我还会捕获其余部分,以后再使用它):
/^(?<c>.)(?<my_match>(?:[^\k<c>]|(?<=\\)\k<c>)+)\k<c>(?<rest>.*)$/
奇怪的是,它在命令行(在Windows cmd下)正常工作:
echo /sd\/grs/ | perl -ne "print $+{my_match} if /^(?<c>.)(?<my_match>(?:[^\k<c>]|(?<=\\)\k<c>)+)\k<c>(?<rest>.*)$/"
打印:
sd\/grs
但是,当我在脚本中使用完全相同的正则表达式时,会引发编译错误:
Unrecognized escape \k in character class passed through in regex; marked by <-- HERE in
m/^(?<c>.)(?<my_match>(?:[^\k <-- HERE <c>]|(?<=\\)\k<c>)+)\k<c>(?<rest>.*)$/ at mytestscript.pl line 188.
该正则表达式的命令行和脚本有什么不同?当然欢迎任何其他正则表达式。
感谢。
答案 0 :(得分:2)
答案 1 :(得分:1)
脚本和命令行之间的区别在于命令行中缺少-w
。