我试图使用以下Perl正则表达式从字符串中找到“花哨的引号”,但它返回false。
$text = "NBN “a joint venture with Telstra”";
if ($text =~ m/“/)
{
print "found";
}
我也尝试使用“\x93
”ascii代码,但仍然无效。我被困在这里。
感谢任何帮助。
此致 阿伦
答案 0 :(得分:3)
根据您尝试匹配的字符串的编码,您可能需要执行不同的操作。请参阅The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。
如果输入字符串是以UTF-8编码的,那么您需要在perl脚本中指定该编码 - 一种方法是使用use encoding 'UTF-8'
。
如果您希望脚本本身的编码为UTF-8,也可以指定use utf8
。但是,您可能会更好,知道要检查的字符的代码点,并直接指定它:
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";
}
答案 1 :(得分:1)
请参阅"Demoroniser"以及针对您的具体问题,在Perlmonks Re^3: Reg Ex to strip MS smart quotes上仅讨论“智能”引号。
这个建议假设 - 也许是错误的 - 你的数据库的“花哨的引用”来自一些产生Windows-1252编码文本的微软软件 - 如果你有UTF-8代替,Avi已经指出了你朝着正确的方向前进。
答案 2 :(得分:0)
我最近遇到了一些明智的引用,我无法使用上述帖子中提到的正则表达式来消除这些引用。我不得不做一个我完全通过反复试验发现的技巧:
希望这有助于某人。