我很难让这个正则表达式工作。我要做的就是删除块注释。这是我到目前为止所做的,但我无法摆脱最后的*/
。
$string = 'this is a test /*asdfa */ ok then';
$pattern = '/\/\*([^\*\/]*)/i';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
//this is a test */ ok then
任何帮助将不胜感激。
答案 0 :(得分:6)
使用与/
不同的分隔符 - 这会让人感到困惑。
'#/\*.+?\*/#s'
;
答案 1 :(得分:6)
token_get_all并在没有T_COMMENT
的情况下重新构建它。我认为不应该说更多。
答案 2 :(得分:5)
试试这个模式:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
答案 3 :(得分:1)
我正在使用此功能(请注意,您只需要/*...*/
条评论的第一行):
#-- extract /* ... */ comment block
# or lines of #... #... and //... //...
if (preg_match("_^\s*/\*+(.+?)\*+/_s", $src, $uu)
or (preg_match("_^\s*((^\s*(#+|//+)\s*.+?$\n)+)_ms", $src, $uu))) {
$src = $uu[1];
}
// Public Domain, not CC
效果很好。但是像所有正则表达式解决方案一样,它会在$PHP = "st/*rings"
边缘情况下失败。
答案 4 :(得分:0)
使用模式preg_replace
运行/\*|\*/
两次应该有效。
答案 5 :(得分:0)
也许:
$pattern = '/\/\*([.]*)\*\//i';
请不要降低速率,因为这是一个快速的猜测,试图帮助...:)
答案 6 :(得分:0)
要修复你的主要模式,我可以告诉你,你的最终“* /”不匹配,因为你的模式中没有它。
按照您自己的模式,尝试这一点修改:
'/\/\*([^\*\/]*)**\*\/**/i'
我还建议你使用不同的定界符来使模式更易读。
#/\*([^\*/]*)\*/#i