Fre*_*ing 2 php regex preg-replace
我想在字符串和字符串处强制执行单个问号.在JavaScript中它完美地运作:
var re = /[?7!1]*$/;
document.write('lolwut'.replace(re, '?'));
document.write('lolwut?'.replace(re, '?'));
document.write('lolwut??'.replace(re, '?'));
document.write('lolwut???'.replace(re, '?'));
document.write('lolwut???!!!11'.replace(re, '?'));
Run Code Online (Sandbox Code Playgroud)
所有返回的值都等于"lolwut?" PHP变体不能顺利运行:
$re = '/[?7!1]*$/';
echo preg_replace($re, '?', 'lolwut') . "\n";
echo preg_replace($re, '?', 'lolwut?') . "\n";
echo preg_replace($re, '?', 'lolwut??') . "\n";
echo preg_replace($re, '?', 'lolwut???') . "\n";
echo preg_replace($re, '?', 'lolwut???!!!11') . "\n";
Run Code Online (Sandbox Code Playgroud)
输出是:
lolwut?
lolwut??
lolwut??
lolwut??
lolwut??
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
更新:
$(美元)断言字符串结尾
断言是对当前匹配点之后或之前的字符的测试,该字符实际上不消耗任何字符.
这是我的困惑,以及preg_replace的隐含全局标志,感谢salathe提供线索.(你们应该投票给他的答案,真的)
结帐rtrim()- http://php.net/manual/en/function.rtrim.php
echo rtrim('lolwut','?7!1').'?'; // lolwut?
echo rtrim('lolwut?','?7!1').'?'; // lolwut?
echo rtrim('lolwut??','?7!1').'?'; // lolwut?
echo rtrim('lolwut???!!!11','?7!1').'?'; // lolwut?
echo rtrim('lolwut1??!7!11','?7!1').'?'; // lolwut?
Run Code Online (Sandbox Code Playgroud)
rtrim会 Strip whitespace (or other characters) from the end of a string
第二个论点:
您还可以通过charlist参数指定要删除的字符.只需列出要删除的所有字符.使用..,您可以指定一系列字符.
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |