+ -
当前位置:首页 → 问答吧 → 求教 php preg_match 分析 CPP文件里的类间关系,怎么写?

求教 php preg_match 分析 CPP文件里的类间关系,怎么写?

时间:2011-09-20

来源:互联网


行例:
1. class XXX : public YYY, ZZZ { //正常表达,其中class可为struct,public可为protected,部分空格可有可无,或为TAB,或随意换行。

2. class XXX{ //不从任何父类继承

3. class XXX:public YYY //:前后或没空格,或只一个父类,或大括号在下一行
{

4. class XXX //换行且加了空格
  : public YYY

现在
  $fctx = file_get_contents ($f); //读入整个文件到一行了,用preg_match_all的话可以吗?

  $lines = file ($f);
  foreach ($lines as $ln)
  {
  if (!preg_match ('/\bclass\b/', $ln, $matches)) //??????这一行想极不知怎么写
  {
  }
  }

作者: vicallee   发布时间: 2011-09-20

如果只是判断匹不匹配,后面的$matches可以不要了。

直接if (!preg_match ('/\bclass\b/', $ln))

作者: jordan102   发布时间: 2011-09-20

要匹配的,要取出XXX,再如果有,取出YYY和ZZZ

作者: vicallee   发布时间: 2011-09-20

就是不知道那个正则表达式该怎么表达。。。

作者: vicallee   发布时间: 2011-09-20

你可以贴出$fctx的结果。

作者: jordan102   发布时间: 2011-09-20

因为是读的live555的cpp文件,内容很长的。下面是中间一部分:

#ifndef _FRAMED_FILTER_HH
#include "FramedFilter.hh"
#endif

class ADUFromMP3Source: public FramedFilter {
public:
  static ADUFromMP3Source* createNew(UsageEnvironment& env,
FramedSource* inputSource,
Boolean includeADUdescriptors = True);


分析是想取出ADUFromMP3Source和FramedFilter

作者: vicallee   发布时间: 2011-09-20

试试。写的不好,等大牛优化。
PHP code

$fctx= <<<HTML
#ifndef _FRAMED_FILTER_HH
#include "FramedFilter.hh"
#endif

class ADUFromMP3Source: public FramedFilter {
public:
  static ADUFromMP3Source* createNew(UsageEnvironment& env,
FramedSource* inputSource,
Boolean includeADUdescriptors = True);
HTML;
preg_match_all('/class\s*([^\s:\{]*):\s*(?:public|protected)?\s*([^\s:\{]*)\s*\{/isU',$fctx,$m);
print_r($m);


Array
(
  [0] => Array
  (
  [0] => class ADUFromMP3Source: public FramedFilter {
  )

  [1] => Array
  (
  [0] => ADUFromMP3Source
  )

  [2] => Array
  (
  [0] => FramedFilter
  )

)

作者: jordan102   发布时间: 2011-09-20

谢谢,我试试看插入程序。

作者: vicallee   发布时间: 2011-09-20

相关阅读 更多