2

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

我以字符串为例

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

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

我不确定的是,(\S+)这意味着任何非空格,但不确定+ 另外我不明白\*{4}and 在另一个字符串中我有\*{3}

谢谢

4

2 回答 2

3

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

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

您会在perlreperlretutperlrequick中找到此文档。

于 2013-07-02T17:19:41.627 回答
2

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

atom+导致atom匹配 1 次或多次。

所以,

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


\*是匹配的模式*

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

所以,

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


所以,

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

****  FOO!  ****

但不是

***  FOO BAR!  ***
于 2013-07-02T17:20:09.280 回答