我试图找到看中引号“使用下面的Perl的正则表达式的字符串,但它返回false。Perl的正则表达式找不到花哨引号“
$text = "NBN “a joint venture with Telstra”";
if ($text =~ m/“/)
{
print "found";
}
我也使用“\x93
”的ASCII码尝试,但仍然无法正常工作。我被困在这里。
任何帮助表示赞赏。
问候, 艾伦
我试图找到看中引号“使用下面的Perl的正则表达式的字符串,但它返回false。Perl的正则表达式找不到花哨引号“
$text = "NBN “a joint venture with Telstra”";
if ($text =~ m/“/)
{
print "found";
}
我也使用“\x93
”的ASCII码尝试,但仍然无法正常工作。我被困在这里。
任何帮助表示赞赏。
问候, 艾伦
取决于你试图匹配字符串的编码,你可能需要做不同的事情。请参阅The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。
如果输入字符串以UTF-8编码,那么您需要在perl脚本中指定该编码 - 一种方法是使用use encoding 'UTF-8'
。
您还可以指定use utf8
如果你想脚本本身的编码为UTF-8。你可能最好,但是,知道你是检查字符的代码点,并直接指定它:
use utf8;
use encoding 'UTF-8';
$text = "NBN “a joint venture with Telstra”"; # Make sure to quote this string properly
if ($text =~ m/\N{U+201C}/) # “ is the same as U+201C LEFT DOUBLE QUOTATION MARK
{
print "found";
}
见"Demoroniser"并为您的具体问题,只是“智能”引号的讨论它位于Perlmonks Re^3: Reg Ex to strip MS smart quotes。如果你有UTF-8而不是Avi已经指出你的方向正确,那么你的数据库的“花哨报价”就是来自某个微软软件产生的Windows-1252编码文本。
【正文:: Demoroniser(http://p3rl.org/Text::Demoroniser)也可在CPAN。 – daxim 2011-04-05 22:21:18
我最近碰到,我不能排除使用仅上述职位提到的正则表达式-ES一些智能引号来了。我不得不做一个把戏,我完全通过反复试验发现:
希望这可以帮助别人。
究竟是哪个4个正则表达式? – 2015-05-05 12:20:04
我测试你的正则表达式在http://www.regextester.com/和它的工作。但它只找到第一个报价。关于你的问题,我没有写任何珍珠,但据我所见,珍珠中的其他正则表达式正在编写,例如'$ vmsn =〜/(。+ \。vmsn)/ xm;',所以你的正则表达式会看起来像'/“/ m'。 – 2011-04-04 11:40:31
'“(U + 201C)不在US-ASCII字符集中。 – Gumbo 2011-04-04 11:46:36
@MPękalski,你是对的。我使用评估工具测试了正则表达式,它工作。但它在Perl脚本中不起作用。 – Allen 2011-04-04 12:09:25