简单的正则表达式不适用于Perl
发布时间:2020-12-14 05:48:43 所属栏目:百科 来源:网络整理
导读:我有一个简单的Perl正则表达式,它应匹配两个字符之间的空格,并用*替换空格.在某些情况下,它根本不起作用. Perl系列是这样的: s/([A-Za-z0-9])s+([A-Za-z0-9])/1 * 2/g; 例如,见下文:(?是我的zsh提示) ~ cat mwes t Subscript[r,1]~ perl -pe "s/([A-Za-
我有一个简单的Perl正则表达式,它应匹配两个字符之间的空格,并用*替换空格.在某些情况下,它根本不起作用. Perl系列是这样的:
s/([A-Za-z0-9])s+([A-Za-z0-9])/1 * 2/g; 例如,见下文:(?>是我的zsh提示) ~> cat mwe s t Subscript[r,1] ~> perl -pe "s/([A-Za-z0-9])s+([A-Za-z0-9])/1 * 2/g;" < mwe s * t Subscript[r,1] t下标[r,1]未匹配.这只是一个例子.我的文件更长,虽然正则表达式捕获最正确,但我找不到它不匹配(并且应该)的模式. Vim似乎正确地找到了所有内容(在适当的正则表达式语法更改之后). 我怎样才能解决这个问题?我该如何帮助诊断问题? 谢谢. 解决方法
改为使用先行:
perl -pe 's/([a-z0-9])s+(?=[a-z0-9])/1 * /ig' mwe 输出:
问题是,在你的正则表达式中你是匹配而不是向前看.因此,对于以下情况: perl -pe 's/([a-z0-9])s+([a-z0-9])/1 * 2/ig' <<< "a b c" 你会得到: a * b c 由于b先前已经匹配,内部指针已经向前移动. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |