Re: [問題] 如何只去掉頭尾全型空白

看板Perl作者時間14年前 (2010/09/28 16:30), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串4/5 (看更多)
※ 引述《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
capturing 指的是用 \1, \2 去 reference?
09/28 16:36, 1F

09/28 16:36, , 2F
所以在此例當中 單用 () 也可 只是既然沒要 reference
09/28 16:36, 2F

09/28 16:36, , 3F
多加 ?: 會較快速 是這樣嗎?
09/28 16:36, 3F
文章代碼(AID): #1CeQUWpW (Perl)
文章代碼(AID): #1CeQUWpW (Perl)