我正在尝试编写一个正则表达式来解析调用脚本的语法并捕获脚本名称。
所有这些都是调用的有效语法
# normal way
run cred=username/password script.bi
# single quoted username password, also separated in a different way
run cred='username password' script.bi
# username/password is optional
run script.bi
# script extension is optional
run script
# the call might be broken into multiple lines using \
# THIS ONE SHOULD NOT MATCH
run cred=username/password \
script.bi
这就是我目前所拥有的
my $r = q{run +(?:cred=(?:[^\s\']*|\'.*\') +)?([^\s\\]+)};
捕获$1
中的值。
但是我得到了
Unmatched [ before HERE mark in regex m/run +(?:cred=(?:[^\s\']*|\'.*\') +)?([ << HERE ^\s\]+)/
最佳答案
\\
被视为 \
,因此在正则表达式中它变成 \]
,因此转义 ]
以及不匹配的 [
替换为 run +(?:cred=(?:[^\s\']*|\'.*\') +)?([^\s\\\\]+)
(注意 \\\\
)并尝试。
此外,从评论中来看,您必须使用 qr
作为正则表达式,而不仅仅是 q
。
(我刚刚查看了错误,而不是您问题的正则表达式的有效性/效率)
关于regex - 正则表达式从命令历史记录中获取已执行的脚本名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127984/