我正在尝试提取位于字符串/*和*/之间的字符串中的所有子字符串。我知道这可能需要使用正则表达式来完成,但是我很难获得正确的正则表达式,因为星号字符实际上是用来表示重复字符的。我正在尝试在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";
?>发布于 2010-08-14 19:52:57
工作代码:
$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"
}
}发布于 2010-08-14 19:59:41
要从PHP代码中提取注释节,可以使用Tokenizer。
token_get_all()将解析代码,并返回一个元素数组。
注释将表示为T_COMMENT元素。
这有一个很大的好处,那就是捕获PHP代码中所有可能的注释方式:
/* This way, */
// This way
# and this way发布于 2010-08-14 19:51:47
转义*以使用它,并使用ad括号捕获类似于/\*(.*)\*/的内容,并且应该使用preg_match_all来查找字符串中的所有匹配项。
(而且比使用var_dump($anArray)更容易)
https://stackoverflow.com/questions/3483119
复制相似问题