需要帮助了解perl中的搜索代码\ * {4}

时间:2013-07-02 17:15:43

标签: regex perl

Perl是我较弱的语言之一。我正在转换一些旧的Perl代码清理它并删除死代码。在代码中,我有一些搜索字符串,用于读取科学计算的输入文件,其主要包含变量和数字。

我以字符串为例

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

所以我认为,从我在线看到的情况来看,\s*正在读取任意数量的空格/eg来评估替换模式并替换整个刺痛。数组$monte_inputs_array[$icase]是我在代码中啜饮的数组。

我不确定的是(\S+)所以这意味着任何非空格但不确定+ 另外,我不理解\*{4}和另一个字符串\*{3}

由于

2 个答案:

答案 0 :(得分:3)

\S+表示任何大于或等于非空白字符的数量。

\*{4}正好代表四个*个字符。

您会在perlreperlretutperlrequick中找到相关信息。

答案 1 :(得分:2)

\S匹配任何不是空格的代码点。

atom+会导致atom匹配一次或多次。

所以,

\S+是一个匹配非空白序列的模式,至少有一个长。


\*是与*匹配的模式。

atom{4}会导致atom匹配4次。

所以,

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


所以,

\*{4}\s*(\S+)\s*\*{4}匹配

等字符串
****  FOO!  ****

但不是

***  FOO BAR!  ***