Re: [問題] 如何只去掉頭尾全型空白
※ 引述《kkk5566 (你不夠資深喔!)》之銘言:
: s= s.replace(/(:?^ +| +$)/, '');
: 試出來了 在 javascript 當中這樣就可以搞定
: 用 | 可以切成兩部分
: ^ +
: 應該是把頭的全型空白去掉
: +$
: 應該是把尾的全型空白去掉
: 最後還有一事不明
: 請問那個 () 跟 :? 是作啥用的啊?
: ※ 引述《liyih ()》之銘言:
: : my $FW_SPACE = qr/\Q \E/;
: : my $s = " 我是字 我是字, ";
: : $s =~ s/(:?^$FW_SPACE+|$FW_SPACE+$)//g;
: : print "[$s]\n";
: : 或是用
: : use utf8;
: : $s =~ s/(:?^\p{Z}+|\p{Z}+$)//g;
: : 參考看看:
: : * Regex Tutorial - Unicode Characters and Properties
: : http://www.regular-expressions.info/unicode.html
() => capturing group
:? => non-capturing
其實也可以用 s/\s//g; 來處理空白,\s 還包含 Unicode 當中的空白,
並非只有 ASCII 的 0x20,其中也有全形空白等等。
可以參考 http://en.wikipedia.org/wiki/Space_%28punctuation%29
此外,在 JavaScript 中使用 regexp 的 \s 不同瀏覽器也會有些差異,
可以嘗試把所有的 Unicode 空白做個取代比較看看。
以下,在 Perl 5.10 測試所有空白分屬在 \s 與 \S 的哪一群當中。
use Data::Dump;
sub show_code { my $c = shift; return Data::Dump->dump($c); }
my $s = '';
$s .= "\x{0020}"; # 一般的空白
$s .= "\x{00a0}";
$s .= "\x{1680}";
$s .= "\x{180e}";
$s .= "\x{2000}";
$s .= "\x{2001}";
$s .= "\x{2002}";
$s .= "\x{2003}";
$s .= "\x{2004}";
$s .= "\x{2005}";
$s .= "\x{2006}";
$s .= "\x{2007}";
$s .= "\x{2008}";
$s .= "\x{2009}";
$s .= "\x{200a}";
$s .= "\x{200b}";
$s .= "\x{200c}";
$s .= "\x{200d}";
$s .= "\x{202f}";
$s .= "\x{205f}";
$s .= "\x{2060}";
$s .= "\x{3000}"; # CJK 全形空白
$s .= "\x{feff}";
$s =~ s/\s//g;
$s =~ s/(\S)/show_code($1)/eg;
print "[$s]";
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.64.133
推
09/28 16:36, , 1F
09/28 16:36, 1F
→
09/28 16:36, , 2F
09/28 16:36, 2F
→
09/28 16:36, , 3F
09/28 16:36, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 5 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章