Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在两个定位点之间替换字符?_Regex_Perl - Fatal编程技术网

Regex 如何在两个定位点之间替换字符?

Regex 如何在两个定位点之间替换字符?,regex,perl,Regex,Perl,如果我有这样一根绳子 my $s = 'src="/api/385/=VIGTIG%20UPDATE%20!.jpg?size=webview" /></span>'; 然后如何将所有%20替换为介于/api/385/和第一个>之间的uu?这将满足您的需要 $s =~ s|(/=[^>]+)| (my $ss = $1) =~ s/%20/_/g; $ss |e; 但是您知道%20是一个空格的十六进制吗?这将满足您的需要 $s =~ s|(/=[^>]+)| (

如果我有这样一根绳子

my $s = 'src="/api/385/=VIGTIG%20UPDATE%20!.jpg?size=webview" /></span>';

然后如何将所有%20替换为介于/api/385/和第一个>之间的uu?

这将满足您的需要

$s =~ s|(/=[^>]+)| (my $ss = $1) =~ s/%20/_/g; $ss |e;

但是您知道%20是一个空格的十六进制吗?

这将满足您的需要

$s =~ s|(/=[^>]+)| (my $ss = $1) =~ s/%20/_/g; $ss |e;
但是您知道%20是十六进制的空格吗?

一种方法是写入:

$s =~ s{(/api/385/[^>]*>)}{my $tmp = $1; $tmp =~ s/%20/_/g; $tmp}e;
它将/api/385/[^>]*>替换为将%20替换为其中的uu。s///中的e标志表示替换内容是表达式,而不是字符串文字。

一种方法是写入:

$s =~ s{(/api/385/[^>]*>)}{my $tmp = $1; $tmp =~ s/%20/_/g; $tmp}e;

它将/api/385/[^>]*>替换为将%20替换为其中的uu。s///中的e标志表示替换内容是一个表达式,而不是字符串文字。

字符串来自何处?使用DOM解析器有意义吗?转换为wiki模型的是html,因此此时它不是有效的html。字符串从何而来?使用DOM解析器有意义吗?转换为wiki模型的是html,因此此时它不是有效的html。括号符号[…]创建了一个字符类。通常它表示括号内的任何字符-例如,[aeiou]表示任何字符a、e、i、o或u,[1-5M-Q]表示任何介于1和5之间的ASCII数字或介于M和Q之间的ASCII大写字母-但当字符类中的第一个字符为^时,它表示相反的字符;所以[^>]表示任何不是>的字符。星号*表示我刚才所说的零个或多个字符,多总比少好,因此[^>]*表示零个或多个非>字符。括号符号[…]创建了一个字符类。通常它表示括号内的任何字符-例如,[aeiou]表示任何字符a、e、i、o或u,[1-5M-Q]表示任何介于1和5之间的ASCII数字或介于M和Q之间的ASCII大写字母-但当字符类中的第一个字符为^时,它表示相反的字符;所以[^>]表示任何不是>的字符。星号*表示我刚才所说的零个或多个字符,多总比少好,因此[^>]*表示零个或多个非>。