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}
。
由于
答案 0 :(得分:3)
答案 1 :(得分:2)
\S
匹配任何不是空格的代码点。
atom+
会导致atom
匹配一次或多次。
所以,
\S+
是一个匹配非空白序列的模式,至少有一个长。
\*
是与*
匹配的模式。
atom{4}
会导致atom
匹配4次。
所以,
\*{4}
是与****
匹配的模式。
所以,
\*{4}\s*(\S+)\s*\*{4}
匹配
**** FOO! ****
但不是
*** FOO BAR! ***