2013-07-02 95 views
2

Perl是我較弱的語言之一。我正在轉換一些舊的Perl代碼清理它並刪除死代碼。在代碼中,我有一些搜索字符串,用於讀取科學計算的輸入文件,其中大部分是變量和數字。需要幫助瞭解perl中的搜索代碼,使用 * {4}

我有串作爲一個例子

$tpl_file =~ s/\*{4}\s*(\S+)\s*\*{4}/$monte_inputs_array[$icase]{$1}/eg; 

因此,我認爲,從我看到的路線,\s*是閱讀任意數量的空格/eg評估置換方式和整體刺取代。數組$monte_inputs_array[$icase]是我在代碼中混淆的數組。

什麼,我不知道是(\S+)因此,這意味着任何非空白,但不能確定+ 此外,我不明白\*{4}和另一個字符串我有\*{3}

由於

+0

抱歉,上面我的意思/ S是指非空白不無數量 – Carole

+2

'\ *。 ' - 字面星號。 '{4}'四個。四顆星,任意數量的空間,然後至少有一個非空間,然後是任意數量的空間,然後是四顆星。 –

+2

@JulianFondren:這是一個答案,而不是評論 – ysth

回答

3
\S+

指任何數量大於或等於的非空白字符之一。

\*{4}意味着正好四個*個字符。

您可以在perlre,perlretutperlrequick中找到該文件。

+0

'\ S'與數字沒有任何關係,只是數字實際上與它匹配,因爲它們是非空格。 – TLP

+0

我看到措辭不清楚,導致您誤解了意圖。我的意思是任何*數量*大於或等於一個非空白字符,並已相應更新。 – DavidO

+1

DavidO感謝您的回答,文件提到我很難照顧它。我會使用那些謝謝 – Carole

2

\S匹配任何非空格的代碼點。

atom+導致​​匹配1次或多次。

所以,

\S+是非空白至少一個長的序列相匹配的圖案。


\*是匹配*的圖案。

atom{4}原因​​需要匹配4次。

所以,

\*{4}是匹配****的模式。


所以,

\*{4}\s*(\S+)\s*\*{4}匹配的字符串,如

**** FOO! **** 

但不

​​