我在Perl中有一個字符串,如:「Full Name (userid)
」,我想只返回userid(「()
」之間的所有內容)。什麼是正則表達式來返回長字符串中兩個字符之間的子字符串?
什麼正則表達式會在Perl中做到這一點?
我在Perl中有一個字符串,如:「Full Name (userid)
」,我想只返回userid(「()
」之間的所有內容)。什麼是正則表達式來返回長字符串中兩個字符之間的子字符串?
什麼正則表達式會在Perl中做到這一點?
這將匹配任何字(\w
)的「(
」裏的性格和「)
」
\w
單詞字符(字母數字或_),不只是[0-9a-zA-Z_]
而且數字和字符相匹配的非羅馬字母文字。
my($username) = $str =~ /\((\w+)\)/;
# or
$str =~ /\((\w+)\)/;
my $username = $1;
如果你需要在s///
,你可以得到與$1
或\1
變量。
$str =~ s/\((\w+)\)/$1:\1/; # pointless example
如果你想捕捉到所有的可能性,這將更好地工作:
my($username) = $str =~ /\(([^\)]+)\)/;
# or
my($username) = $str =~ /\((.+?)\)/;
如果你的正則表達式開始變得複雜,我建議你瞭解/x
選項。
my($username) = $str =~/\( ([^\)]+) \) /x;
perldoc perlre
,以獲取更多信息。
如果您剛開始學習正則表達式,我會推薦閱讀perldoc perlretut
。
轉義括號,捕獲中間的字符串。假設用戶id包括僅\w
字符:
my ($userid) = $str =~ /\((\w+)\)/ ;
m//
上下文返回所捕獲的匹配。在拍攝
更多信息可以在
那麼只需將額外的括號返回值呢? (\ w +)vs \ w +? – Brian 2009-07-22 16:54:39
這將讓括號,而不僅僅是字母數字和之間的任何_被發現。這可能不是問題,但是\ w不會得到破折號,英鎊符號等用戶名。
$ str =〜/\((.*?)\)/;
當您搜索括號內的內容時,例如「<> [](){}」或更爲複雜的諸如XML/HTML標記,它總是更好地構建的圖案的方式:
opening bracket, something which is NOT closing bracket, closing bracket
當然,你的情況的閉括號'可以是省略:
my $str = 'Full Name (userid)';
my ($user_id) = $str =~ /\(([^\)]+)/;
除了說了些什麼:如果你碰巧知道你的字符串恰好有這種格式,你也可以不用正則表達式。如果字符串是$s
,你可以做
chop $s; # throws away last character (by assumption must be closing parenthesis)
$username=substr($s, rindex($s,'(') + 1);
至於正則表達式的解決方案,可以肯定的是,全名不能還含有一對括號?在這種情況下,它可能是有意義地錨定於模式的結尾結束的「)」:
/ [(] # open paren
([^(]+) # at least one non-open paren
[)] # closing paren
$ # end of line/pattern
/x && $username = $1;
當然,如果他想要什麼*括號之間,這將是/(\(\ w + \)) /? – IRBMe 2009-07-22 16:40:27
假設他不需要`()`我的回答是正確的。 – 2009-07-22 16:52:02