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大写字母-但当字符类中的第一个字符为^时,它表示相反的字符;所以[^>]表示任何不是>的字符。星号*表示我刚才所说的零个或多个字符,多总比少好,因此[^>]*表示零个或多个非>。