2010-09-01 30 views
-1

在Perl中,如果我知道文本的前後部分,如何提取字符串中的文本?在Perl中提取字符串之間的文本

實施例:

輸入:www.google.com/search?size=1 &化妝= BMW &模型= 2000

我想提取字 'BMW',這總是在之間「&化妝=」 和下一個 「&」

回答

13

不要使用正則表達式使用URIURI::QueryParam,像這樣:

use strict; 
use warnings; 
use URI; 
use URI::QueryParam; 

my $u = URI->new('http://www.google.com/search?size=1&make=BMW&model=2000'); 
print $u->query_param('make'); 
+0

好模塊,感謝信息 – 2010-09-01 08:04:44

1

使用正則表達式:

my ($captured_string) = $link =~ /\&make=(\w+)\&/; 

我的正則表達式假定你想要捕捉make域中出現的任何東西。 \w捕獲大寫和小寫字母。如果你想捕捉別的東西,你可以使用角色類。像這樣[\w\s]+可以匹配多個字母和空格。您可以在[ ]的字符之間添加任何內容以任意順序進行匹配。

()實際上是捕獲。如果你刪除它,那麼它就會匹配(並且你應該在if語句中使用它)如果你想捕獲多個字符串(比如說你也想要這個模型)。根據你的例子,你可以使用第二組括號此:

my ($make, $model) = $link =~ /\&make=(\w+)\&model=([A-Za-z0-9]+)/; 

希望幫助

+0

確實\ W適用於數字和符號 – syker 2010-09-01 04:05:45

+0

@? syker:查看http://perldoc.perl.org/perlrequick.html – 2010-09-01 05:03:19

+1

這會打破'http://www.google.com/search?make = BMW&model = 2000&size = 1',並且不會搶佔整個領域。一個更好的正則表達式是'/ [?&] make =([^&] +)/',但正確的解決方案不是推出自己的錯誤正則表達式,而是使用已經爲您解析URL的標準模塊。 – 2010-09-01 12:23:28

相關問題