正则表达式" -day every"或者"每天时间"转换 - 如果我们每天都给出"那就不用#34;它不应该转换为perl

时间:2014-06-19 06:42:22

标签: regex perl

如果我们提供-day every every -day time它不应该在Perl中转换,如何为- OR NOT转换every-day -day every制作正则表达式。

例如:如果我们提供NOT day every,则应将其转换为every-day

但是我们给s/(?<!\w)-/NOT /g;它不应该转换它。

我已经使用了{{1}}提到的正则表达式并且它工作正常但我有另一种情况我们不需要转换短划线( - )if( - )属于双引号“”。

就像一个例子:keyword =“every-day”-time light。

它应该转换“每天”而不是时间光。

1 个答案:

答案 0 :(得分:1)

正则表达式替换任何不遵循单词字符的短划线:s/(?<!\w)-/NOT /g;

现在将正则表达式更新为相同的内容,但不在双引号内:

use strict;
use warnings;

while (<DATA>) {
    s{(".*?")|(?<!\w)-}{$1 // 'NOT '}esg;
    print;
}

__DATA__
-day every
every -day time
every-day
"every - day" -time light.

输出:

NOT day every
every NOT day time
every-day
"every - day" NOT time light.