regex - 正则表达式从命令历史记录中获取已执行的脚本名称

标签 regex perl

我正在尝试编写一个正则表达式来解析调用脚本的语法并捕获脚本名称

所有这些都是调用的有效语法

# 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/

相关文章:

regex - 在 Dart 中使用 RegExp 实现模式

php - 如何在 PHP 中获取 MySQL 函数的参数

perl,比较散列,子集

perl - Perl : re-loading hash values possible? 中的快速查找

perl - Perl做…while和最后一个命令

perl - 如何将多行处理/存储到从 perl 文件读取的单个字段中?

perl - 如何在现有文件的中间插入一行

java - 如何从字符串中提取图像url?

javascript - 正则表达式获取大括号之间的文本

java - 正则表达式用于搜索和替换字符串中的文本