2010-08-14 75 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