使用單位元組字符可選匹配作業:
~% perl -e 'print ("l" =~ /l?/u)'
1%
~% perl -e 'print ("l" =~ /l?l?/u)'
1%
使用 unicode(寬位元組)字符可選匹配不起作用
~% perl -e 'print ("д" =~ /д?/)'
1%
~% perl -e 'print ("д" =~ /д?д?/u)'
~%
如何讓它發揮作用?我已經添加了/u,我試過use feature 'unicode_strings'沒有用。我假設 perl 將д其視為多個位元組,并且僅適用?于最后一個位元組。
uj5u.com熱心網友回復:
你必須告訴 Perl 源代碼是 UTF-8:
perl -Mutf8 -e 'print "д" =~ /д?д?/u'
有關詳細資訊,請參閱utf8。
uj5u.com熱心網友回復:
使用use utf8;( -Mutf8)。
默認情況下,Perl 期望提供給它的源代碼是 ASCII。(字串和正則運算式文字是 8 位干凈的,這意味著像“д”的 UTF-8 這樣的非 ASCII 位元組按原樣包含在內。)
因此,以下內容在 UTF-8 終端上是等效的:
$ perl -le'print "д" =~ /д?д?/u || 0'
0
$ perl -le'print "\xD0\xB4" =~ /\xD0\xB4?\xD0\xB4?/u || 0'
0
Usinguse utf8;告訴它期待 UTF-8。
以下在 UTF-8 終端上是等效的:
$ perl -le'use utf8; print "д" =~ /д?д?/u || 0'
1
$ perl -le'use utf8; print "\x{434}" =~ /\x{434}?\x{434}?/u || 0'
1
一個襯里可以-Mutf8用作use utf8;.
$ perl -Mutf8 -le'print "д" =~ /д?д?/u || 0'
1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493835.html
