如何不匹配正则表达式perl中字符串末尾的特定数字?

时间:2018-06-19 10:39:07

标签: regex perl

我有一个文件,其列表如下所示:

$ABC02

我希望所有那些不是02的字符串。这是代码的一部分,在此步骤之前,我将字符串ABC记录在一个变量中,并将数字02记录在其他变量中。我基本上希望所有那些以ABC开头的条目,并以/^\$ABC[^02]$/ 之外的2位数字结尾。

我尝试了这个但是没有用:

requestAnimationFrame

在这种情况下使用的正确正则表达式是什么?

3 个答案:

答案 0 :(得分:2)

你的正则表达式目前所做的是找到" $ ABC"接着是一位数。您需要将[^02]拆分为匹配的2个字符。

/^\$ABC[^0][^2]$/

...但是...也会匹配末尾有非数字的字符串。所以,而不是使用你不想找到的东西 - 放入你想要找到的东西。

/^\$ABC([1-9][0-9]|0[013-9])$/

这将查找1到9后跟任何数字或0后跟除2之外的任何数字。如果您不想要(...),可以将(?:...)替换为var table = $('#example').DataTable({ 'ajax': 'https://api.myjson.com/bins/1us28', 'columnDefs': [ { 'targets': 0, 'checkboxes': { 'selectRow': true } } ], 'select': { 'style': 'multi' }, 'order': [[1, 'asc']] }); 捕获组。

答案 1 :(得分:2)

请注意,[^02]是一个否定的字符类,它匹配02以外的任何字符,并且不必是数字,BTW。

您可以在(?!02$)之后使用C否定前瞻,以避免匹配以02结尾的字符串,但以任何其他数字结尾(包括0210等):

/^\$ABC(?!02$)[0-9]+$/

请参阅this regex demo

如果您不希望在C * 02开头后匹配数字,请从前瞻中移除$

/^\$ABC(?!02)[0-9]+$/

请参阅another regex demo

答案 2 :(得分:0)

看起来您只需要从文件中删除一个特定的行。您可以简单地使用该语言来丢弃给定的字符串,而不是编写匹配$ABC后跟除02之外的任何内容的花哨正则表达式模式。像print if not /\$ABC02/

这样的东西

在Perl单行命令中,检查整行是否与该值匹配,如果是,则忽略它

perl -ne 'print unless /^\$ABC02$/' myfile