我試圖找到看中引號「使用下面的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