2010-08-14 48 views
2

我想提取字符串之间的字符串/ *和* /中的所有子字符串。我知道这可能需要用正则表达式来完成,但是我很难得到正确的正则表达式,因为星号字符实际上是用来表示重复的字符。我正在尝试在PHP中使用preg-match方法,这是我迄今为止提出的,但我没有太多运气。正则表达式在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"; 
?> 
+0

您不要碰巧用这个解析PHP源代码中的注释块? – 2010-08-14 11:50:22

+0

我试图建立一个php代码格式化程序来显示使用HTML的php代码 – jazzdawg 2010-08-14 11:52:12

+0

你在尝试你的代码之前发布它吗?有一些基本的错误,例如:我 - > $我php哪些php解析器应该报告。 – 2010-08-14 11:55:05

回答

0

工作代码:

$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" 
    } 
} 
+0

非常感谢 – jazzdawg 2010-08-14 12:00:45

+0

如果我在那里放置一个明星(即:'/ * gh * ij *'),它将会失败 – NullUserException 2010-08-14 12:01:05

+0

@NullUserException:是的,我意识到这一点,我添加了新的版本,应该更好地工作。 – 2010-08-14 12:15:31

0

逃离*使用它,和广告括号来捕捉这样的内容:/\*(.*)\*/,你应该使用preg_match_all,以查找字符串中的所有比赛。

(比一个更容易,使用var_dump($anArray)

0
$aString = "abcdef/*ghij*/klmn/*opqrs*/tuvwxyz"; 
preg_match_all("/\/\*(.*?)\*\//", $aString, $anArray,PREG_SET_ORDER); 
var_dump($anArray); 
0

如果(像你说的在其中一条评论中)你试图在HT中显示PHP代码ML实际上有一个内置功能(highlight_file),正是这个功能。

免费免费的,如果你想利用这个作为一个学习锻炼等:-)

1

要提取评论款款走出的PHP代码,使用Tokenizer忽略。

token_get_all()将解析代码并返回一组元素。

评论将显示为T_COMMENT元素。

这有追赶其在PHP代码中的注释的所有可能的方式的巨大优势:

/* This way, */ 

// This way 

# and this way 
+0

谢谢我会看看那 – jazzdawg 2010-08-14 12:02:29

+1

更重要的是:它不会像'$ str =“/ * foo * /”;' – Gumbo 2010-08-14 12:03:16

+0

@Gumbo好点那样给你带来误报。 – 2010-08-14 12:12:14

0

我认为,正则表达式将是简单

\/\*.*?\*\/ 

这里使用的工作代码演示正则表达式测试仪

http://liveregex.com/WoDbk