Regex perl正则表达式风格,使用m$雷格克斯!对
源字符串:Regex perl正则表达式风格,使用m$雷格克斯!对,regex,perl,Regex,Perl,源字符串: 普通话(11亿) 印地语/乌尔都语(3.5亿) 西班牙文(3.3亿) 英语(3亿) 阿拉伯文(2亿) 正在尝试仅提取语言名称 我有这个代码,目前的工作 if($line =~ m!\s(.*)\(!) { print $1 . "\n" ; } 但是我正在尝试使用quotemeta函数来完成我似乎无法完成的任务 my $regex = quotemeta( "\s(.*)\(" ); #Also tried as i suspect the \s
if($line =~ m!\s(.*)\(!)
{
print $1 . "\n" ;
}
但是我正在尝试使用quotemeta函数来完成我似乎无法完成的任务
my $regex = quotemeta( "\s(.*)\(" );
#Also tried as i suspect the \s is my problem.
my $regex = quotemeta( "\\s(.*)\(" );
if($line =~ m/$regex/)
{
print $1 . "\n" ;
}
有哪种款式比另一种更受欢迎吗?我不明白你想用什么 如果你有实际的正则表达式语言,那么你不想引用它
my $regex = qr/\s(.*)\(/;
if ($line =~ /$regex/) ...
如果您确实想引用它(您想精确地匹配字符串\s(…*)\(
),您不需要显式地使用quotemeta
,但这实际上就是您现在正在做的事情
my $str = '\s(.*)\(';
if ($line =~ /\Q$str\E/) ...
我不明白你想用什么 如果你有实际的正则表达式语言,那么你不想引用它
my $regex = qr/\s(.*)\(/;
if ($line =~ /$regex/) ...
如果您确实想引用它(您想精确地匹配字符串\s(…*)\(
),您不需要显式地使用quotemeta
,但这实际上就是您现在正在做的事情
my $str = '\s(.*)\(';
if ($line =~ /\Q$str\E/) ...
我同意@ephemient的观点,这里不需要quotemeta 我将使用
/x
修饰符使regexp更具可读性:
if($line =~ m/ \s (.*) \( /x )
更进一步
if($line =~ m/
\s # space
(.*) # capture anything
\( # up to and not including a (
/x )
一种改进。目前您正在捕获英语之后的空间。我要添加
if($line =~ m/
\s # space
(.*) # capture anythin
\s+ # up to and not including space
\( # a (
/x )
最后,看看你的程序如果你给它做了什么
1. English (GB) (300 million)
2. Arabic (200 million (2005 value))
一个有效,另一个无效。也许我们不明白为什么!我同意@ephemient的说法,这里不需要引用数据
我将使用/x
修饰符使regexp更具可读性:
if($line =~ m/ \s (.*) \( /x )
更进一步
if($line =~ m/
\s # space
(.*) # capture anything
\( # up to and not including a (
/x )
一种改进。目前您正在捕获英语之后的空间。我要添加
if($line =~ m/
\s # space
(.*) # capture anythin
\s+ # up to and not including space
\( # a (
/x )
最后,看看你的程序如果你给它做了什么
1. English (GB) (300 million)
2. Arabic (200 million (2005 value))
一个有效,另一个无效。可能不理解为什么!我不熟悉perl和regex,让我编辑我的问题我不熟悉perl和regex,让我编辑我的问题谢谢,我错了,我需要quotemeta函数来帮助我避开regex在perl中工作的特殊字符,因为从其他方面看,它会与我的regex中的括号混淆,qr//为我工作感谢Hanks,我错了,我需要quotemeta函数来帮助我避开正则表达式在perl中工作的特殊字符,因为从另一个角度看,它会与正则表达式中的括号混淆,qr//为我工作感谢那是“斜杠x”,而不是“反斜杠x”。这是贪婪与非贪婪的区别:)将(*)更改为(*),谢谢你的帮助!这是“斜杠x”,不是“反斜杠x”。这是贪婪与非贪婪的区别:)将(.*)更改为(.*),谢谢你的帮助!