我有以下Perl代码:
$url=~s/\W//g;
我想将其翻译为PHP preg_replace
。
preg_replace("/[\W]/", "", $url);
我不确定这是否正确。我真的不知道它的作用。
它来自此功能,它将URL格式化为规范格式:
sub formatcanonical {
my $url = lc(shift);
$url =~ s/-/ /g;
$url =~ s/\s+/_/g;
$url =~ s/\W//g;
return $url;
}
答案 0 :(得分:0)
Perl代码
$url=~s/\W//g;
将$url
匹配\W
(非word字符)中的所有字符替换为空白,并将结果分配回$url
变量。
等效的PHP代码:
$url = preg_replace('/\W/', '', $url);
可以通过4 th 参数($limit
)设置最大可能替换次数。默认情况下,$limit
等于-1
(无限制)。所以替换是全局执行的(Perl代码使用g
修饰符来实现)。
注意," word"的定义取决于当前的区域设置(请参阅Escape Sequences):
A"字"字符是任何字母或数字或下划线字符, 也就是说,任何可以成为Perl" word"的一部分的角色。该 字母和数字的定义由PCRE的字符控制 表,并且如果发生特定于语言环境的匹配,则可能会有所不同。对于 例如,在" fr" (法语)语言环境,一些字符代码更大 超过128用于重音字母,这些字母由\ w。
匹配
答案 1 :(得分:-1)
在问之前一定要试试,如果你走得这么远,你可以想出来。
除此之外,你不需要[]&#39。当移动到php时,正则表达式本身并没有改变(或者至少对于常见的东西,当它看起来像php has a page列出所有差异时)。但是从我所看到的,无论哪种方式都应该正确。字符集仅在有多个字符时才有用。在正文中,正则表达式执行此操作:
a-z
,A-Z
,0-9
,_
以及其他一些特殊/ unicode字符,例如ëè
等.Capital \ W否定\ w匹配的位置字符。其次不要改变它的令人困惑的顺序(如果你真的在代码中这样做,它会赢得并没有按预期回来)。
第三,PHP允许数组作为preg_replace
的参数。
所有人都可以这样做:
$string = 'Hello im a test-able string!';
echo preg_replace(
[
'/-/',
'/\s+/',
'/\W/',
],
[
' ',
'_',
'',
],
$string
);
虽然可读性仍然有点可疑。人们可能会选择三个preg_replace函数,特别是一旦它们变得冗长。
最后,如果您需要一个正则表达式测试的游乐场,请尝试regex101,这很棒。
此外,您在我输入内容时进行了3次修改,我现在暂时不予理睬。