在字符中使用捕获名称 class
Use of a capture name inside a character class
我想匹配格式为/.*/.*
的字符串,其中/
可以是斜杠或其他字符,并获取分隔符之间的所有字符。此外,如果这个特殊字符是反斜杠,则不算作分隔符。
比如输入的字符串是/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.
该正则表达式的命令行和脚本有何不同?当然欢迎任何其他正则表达式。
谢谢。
(?<!\)\/(.*?)(?<!\)\/
您可以简单地使用它并获取 capture.See 演示。
脚本和命令行的区别在于命令行缺少-w
。
我想匹配格式为/.*/.*
的字符串,其中/
可以是斜杠或其他字符,并获取分隔符之间的所有字符。此外,如果这个特殊字符是反斜杠,则不算作分隔符。
比如输入的字符串是/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.
该正则表达式的命令行和脚本有何不同?当然欢迎任何其他正则表达式。
谢谢。
(?<!\)\/(.*?)(?<!\)\/
您可以简单地使用它并获取 capture.See 演示。
脚本和命令行的区别在于命令行缺少-w
。