Regex 您好,我需要一个正则表达式来匹配所有内容并转换为大写,perl中单引号内的文本除外
假设我有这样一句话:Regex 您好,我需要一个正则表达式来匹配所有内容并转换为大写,perl中单引号内的文本除外,regex,perl,Regex,Perl,假设我有这样一句话: anything but 'notthis' and also 'not this' and 'notthis' 我希望我的输出是: ANYTHING BUT 'notthis' AND ALSO 'not this' AND 'notthis' 任何帮助都将不胜感激 以下替代品有望对您有效: s/((?:'[^']*')*)([^']+)/$1\U$2/g; 括号组成行进组;第一个左括号创建了一个名为$1的反向引用,下一个是$2,等等。为了避免创建组,表单(:?是一
anything but 'notthis' and also 'not this' and 'notthis'
我希望我的输出是:
ANYTHING BUT 'notthis' AND ALSO 'not this' AND 'notthis'
任何帮助都将不胜感激 以下替代品有望对您有效:
s/((?:'[^']*')*)([^']+)/$1\U$2/g;
括号组成行进组;第一个左括号创建了一个名为$1
的反向引用,下一个是$2
,等等。为了避免创建组,表单(:?
是一个不创建反向引用的括号
第一组捕获并跳过单引号中的短语;它们在$1
中被替换回原来的状态。该组可以匹配空字符串
第二组捕获一个不包含单引号的字符串。由于+
重复运算符是贪婪的,因此它将匹配到下一个单引号或字符串结尾之前。它在替换中由\U
转换为大写
/g
标志会重复尽可能多的次数,从上一场比赛结束的地方开始。欢迎使用stackoverflow。一旦您尝试了一个示例,您将在帮助下获得更大的成功
my $string = "your string 'no upper case' sample";
my @arr = split/('.*?')/,$string;
foreach my $data(@arr)
{
if($data !~ /'/)
{
$data = uc $data;
}
else
{
}
}
$string = join '',@arr;
print "$string";