2015-12-10 93 views
-2

我是新來的Perl。我需要幫助解析下面的字符串,我不知道如何去做。需要幫助解析Perl中的字符串

樣品輸入&預期輸出:

1)簡單的字符串

Input: "postgres=C*/postgres" 
Expected output: ['postgres', 'C*', 'postgres'] 

2)更復雜的字符串。

Input: "test,""""=C/{}"=C*T/"test,""""=C/{}" 
output: ['"test,""""=C/{}"', 'C*T', '"test,""""=C/{}"'] 

請幫忙。

========================= UPDATE ============

我想下面的正則表達式,它適用於簡單的字符串,但對於複雜的字符串無法正常工作。

$line = "postgres=C*/postgres"; 
$line1 = 'test,""""=C/{}"=C*T/"test,""""=C/{}'; 
if($line =~ /(.+)\=(C\*)\/(.+)/) 
{ 
print "$1 $2 $3"; 
} 

if($line1 =~ /(.+)\=(C\*)\/(.+)/) 
{ 
print "$1 $2 $3"; 
} 

輸出:

postgres C* postgres 

我想在之間分離出字符串 「=/」

但問題是並不總是出現在弦=

我想要檢索子像çC *C * TC * X從主串。

+1

詳細解釋引號如何更改=。 「」「」做什麼?下一步「做什麼? – ysth

+0

我想分析如果用戶在執行postgres中的任何SQL之前需要權限,所以這裏[user =」postgres「,permission =」C *。 owner =「postgres」],我正在測試極端的用戶名和角色,因爲postgres允許角色和用戶名中的特殊字符......所以在複雜的字符串[user ='「test,」「」= C/{}「 ',permission =「C * T」,owner ='「test,」「」= C/{}'] – n33rma

+0

這是什麼,而不是如何,如果有1,2或3引號而不是4?那麼稍後的引用需要在那裏保持第一個=不是分隔符?(我不是你要回答那些特定的問題;我希望你給出你的規則,當=是分隔符,什麼時候是認爲就像任何其他字符) – ysth

回答

1
(.*)=(C\*(?:T|x|))\/(.*) 

https://regex101.com/r/wD0xU7/1

當然,這都取決於實際格式的中央部的(可能的值)。

+0

權限可以是任何我剛給例子C,T,C *,T *,C * T ,等等所以有沒有辦法搶到之間的字符串=到/。 – n33rma

+0

您的解決方案正在工作,如果權限有C *在其中:( – n33rma

+0

您必須提供確切的語法爲你想要解析的字符串。如果任何部分可以包含任何內容,顯然,沒有辦法解析它。 – jcaron