Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中介于/*&;*/预赛_Php_Regex_Preg Match - Fatal编程技术网

PHP中介于/*&;*/预赛

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中使用preg-match方法,这是我到目前为止提出的方法,但我运气不太好

<?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*/”;
\/\*.*?\*\/