PHP中介于/*&;*/预赛
我试图提取字符串/*和*/之间的字符串中的所有子字符串。我知道这可能需要用正则表达式来完成,但是我很难得到正确的正则表达式,因为星形字符实际上是用来表示重复字符的。我正在尝试在PHP中使用preg-match方法,这是我到目前为止提出的方法,但我运气不太好PHP中介于/*&;*/预赛,php,regex,preg-match,Php,Regex,Preg Match,我试图提取字符串/*和*/之间的字符串中的所有子字符串。我知道这可能需要用正则表达式来完成,但是我很难得到正确的正则表达式,因为星形字符实际上是用来表示重复字符的。我正在尝试在PHP中使用preg-match方法,这是我到目前为止提出的方法,但我运气不太好 <?php $aString = "abcdef/*ghij*/klmn/*opqrs*/tuvwxyz"; preg_match("/*/.*/", $aString, $anArray); for ($i = 0
<?php
$aString = "abcdef/*ghij*/klmn/*opqrs*/tuvwxyz";
preg_match("/*/.*/", $aString, $anArray);
for ($i = 0; $i < count($anArray); i++)
echo $anArray[i] . "\n";
?>
转义*以使用它,并用ad括号捕获如下内容:
/\*(.*)\*/
,您应该使用preg\u match\u all
查找字符串中的所有匹配项
(使用var\u dump($anArray)
)比for更简单。工作代码:
$aString = "abcdef/*ghij*/klmn/*opqrs*/tuvwxyz";
// SIMPLE VERSION WHERE ASTERISK MAY NOT BE IN THE COMMENT
// \/\* is just escape sequence for /*
// [^\*]* - in comment may be whatever except * (asterisk)
// \*\/ is escape sequence for */
preg_match_all("#\/\*[^\*]*\*\/#", $aString, $anArray);
// BETTER VERSION
// http://www.regular-expressions.info/refadv.html - for explanation of ?: and ?!
preg_match_all("#\/\*" . "((?:(?!\*\/).)*)" . "\*\/#", $aString, $anArray);
var_dump($anArray); // easier for debugging than for-loop
更好版本的输出:
array(2) {
[0]=>
array(2) {
[0]=>
string(8) "/*ghij*/"
[1]=>
string(9) "/*opqrs*/"
}
[1]=>
array(2) {
[0]=>
string(4) "ghij"
[1]=>
string(5) "opqrs"
}
}
如果(正如您在其中一条评论中所说的)您试图用HTML显示PHP代码,那么实际上有一个内置函数()正是这样做的
如果您将此用作学习练习等,则可以忽略:-)要从PHP代码中提取注释部分,请使用 将解析代码,并返回元素数组 注释将表示为
T_COMMENT
元素
这有一个很大的优势,即可以捕获PHP代码中所有可能的注释方式:
/* This way, */
// This way
# and this way
我认为正则表达式将非常简单
\/\*.*?\*\/
下面是使用正则表达式测试仪的工作代码的演示
您没有用这个解析PHP源代码中的注释块吗?我正在尝试构建一个PHP代码格式化程序,以使用HTMLID显示PHP代码。在发布到这里之前,您是否尝试过您的代码?有一些基本的错误,比如:i->$i哪个php解析器应该报告。@jazzdawg:在这种情况下,请使用。如果我在其中的某个地方放一个星号(即:
/*gh*ij*
),它就会报告fail@NullUserException:是的,我意识到了这一点,并添加了新版本,该版本应该会更好。为什么要用\/
转义正斜杠?@NullUserException:我根本不记得哪些字符需要转义:-[谢谢,我将对此进行研究更重要的是:它不会像$str=“/*foo*/”;
\/\*.*?\*\/