正则问题,求救~

_内啥玩意啊 2015-08-06 05:20:22


小弟用正则表达式(?<Class>(?<=\bclass\s)\w+\b)|(?<method>\w+(?=\(\)\s*\{))|(?<parameter>(?<=I\().*?(?=\)))匹配了以下一段文本:

<?php
namespace Home\Controller;

use Home\Model\ArticleCategoriesModel;
use Home\Model\ArticlesModel;
use Think\Controller;
use Home\Model;

class ArticlesController extends BaseController
{

protected $article_categories_model;
protected $articles_model;

public function __construct(){()
parent::__construct();

$authorize_controller = new AuthorizeController();
$authorize_controller->validate();

$this->article_categories_model = new ArticleCategoriesModel($this->logs_model, $this->error_stack);
$this->articles_model = new ArticlesModel($this->logs_model, $this->error_stack);
}

public function getSubCategories()
{
$rank = I('get.rank', 0, null);

$result = $this->article_categories_model->getTypesByRank($rank);

if ($result === false) {
$this->ajaxRespondError($this->error_stack->getLastErrorCode(), '获取文案类目失败');
}

if(is_array($result) && !count($result)){
//若子分类不存在则可能是最底层分类,则尝试查询文案分类
if ($last_sect = strrchr($rank,'_')){
$cid = substr($last_sect,1);
} else {
$cid = $rank;
}

$result = $this->articles_model->getArticlesByCid($cid);

if($result === false){
$this->ajaxRespondError($this->error_stack->getLastErrorCode(), '获取文案列表失败');
}
}

$this->ajaxRespond($result, 'json');
}

public function getArticlesList()
{
$cid = I('get.cid', 0, 'intval');
$page = I('get.page', 1 ,'intval');
$query = I('get.query', null, '');

$result = $this->articles_model->getArticlesByCid($cid, $page, $query);
if ($result === false) {
$this->ajaxRespondError($this->error_stack->getLastErrorCode(), '获取文案列表失败');
}
$this->ajaxRespond($result, 'json');
}
}


测试的简单代码:
class test{

public fuction success(){

$cid = I(one', 0, haha');
$page = I('getname', 0 ,'getmsg');
$query = I('get.success', blank, '');
}
}

class ceshi{

public fuction chenggong1(){

$cid = I('get.cid', 0, 'intval');

$query = I('get.query', null, '');
$page = I('get.page', 1 ,'intval');;
}
}

用正则表达式测试器测试了一下,发现离我想要的效果还差一点点;
我的问题是:怎么才能令表格中类名和方法名和参数名之间的空格去掉?让他们在同一行?
...全文
260 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
_内啥玩意啊 2015-08-08
  • 打赏
  • 举报
回复
引用 12 楼 jinfengyiye 的回复:
你是要实际参数嘛,你匹配()中的就可以了啊。 ()前面是字母,后面无{
不是的,我需要类名,对应的方法名,还有对应的参数......若果单纯是()里面的内容我是可以找到的,但是我需要的不止是这个
gw6328 2015-08-07
  • 打赏
  • 举报
回复
你是要实际参数嘛,你匹配()中的就可以了啊。 ()前面是字母,后面无{
_内啥玩意啊 2015-08-07
  • 打赏
  • 举报
回复
引用 10 楼 jinfengyiye 的回复:
你不是要函数的参数?你是要调用函数的参数? 改下后面的那个取参数的正则。应该是可以办到啊。 找()这个中的值
我就是要函数的参数呀~我不用调用它,把那段代码当成文本来搜索,然后得到我想要的结果, 我后面的正则就是找()这个中的值 的呀,可是结果却不是我想像的样子。怎么写才可以达到我想要的效果呢?
gw6328 2015-08-07
  • 打赏
  • 举报
回复
你不是要函数的参数?你是要调用函数的参数? 改下后面的那个取参数的正则。应该是可以办到啊。 找()这个中的值
_内啥玩意啊 2015-08-07
  • 打赏
  • 举报
回复
引用 8 楼 jinfengyiye 的回复:
[quote=引用 7 楼 jinfengyiye 的回复:]
试下这个,取$1

((?<=\bclass\b)\s+(\w+)\b)|((?<=\bfuction\b)\s+(\w+)\b)|(?<=\bfuction\b\s+\w+)\((\S*)\)\s*\{[/quote]

好像不可以呢~您的运行结果是这样的

我想要的是这样的,我也在努力的想,您还有更好的解决办法吗?
gw6328 2015-08-07
  • 打赏
  • 举报
回复
引用 7 楼 jinfengyiye 的回复:
试下这个,取$1
((?<=\bclass\b)\s+(\w+)\b)|((?<=\bfuction\b)\s+(\w+)\b)|(?<=\bfuction\b\s+\w+)\((\S*)\)\s*\{
gw6328 2015-08-07
  • 打赏
  • 举报
回复
试下这个,取$1
_内啥玩意啊 2015-08-07
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
因为我就没明白你要组干嘛,你写的就是三个或匹配,也就是匹配结果都跟组0(也就是整个匹配得到的数据)结果一样,所以你完全没必要用组,只要0那一列结果就可以了

在一列给打个比方应当是下面这种正则,不是用或来满足
(?<Class>(?<=\bclass\s)\w+\b)[\s\S]*?(?<method>\w+(?=\(\)\s*\{))[\s\S]*?(?<parameter>(?<=I\().*?(?=\)))


我用您的正则试过,它是这样显示的:

但是不是我想要的意思,我想要的是这样的结果,不知道我要怎么写呢?请多多指教啊~!
  • 打赏
  • 举报
回复
因为我就没明白你要组干嘛,你写的就是三个或匹配,也就是匹配结果都跟组0(也就是整个匹配得到的数据)结果一样,所以你完全没必要用组,只要0那一列结果就可以了 在一列给打个比方应当是下面这种正则,不是用或来满足
(?<Class>(?<=\bclass\s)\w+\b)[\s\S]*?(?<method>\w+(?=\(\)\s*\{))[\s\S]*?(?<parameter>(?<=I\().*?(?=\)))
_内啥玩意啊 2015-08-07
  • 打赏
  • 举报
回复
引用 2 楼 jinfengyiye 的回复:
你就说你想取什么结果吧。
把那段代码当成文本。我需要获取下列代码的类名,方法名,参数,而且参数对应方法,方法对应类 就是说,通过正则表达式,我想要知道这段代码里面有哪些class,这些class里面有哪些方法,这些方法里面有哪些参数 这是我写的三条正则表达式: 查找类:(?<Class>(?<=\bclass\s)\w+\b) 查找方法: (?<method>(?<=function ).*(?=\s*\{\s*)) 查找参数: (?<parameter>(?<=I\().*(?=\))) 另外我要怎样做才能得到我想要的结果呢?
_内啥玩意啊 2015-08-07
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你根本就连正则里面组的概念都没搞懂……
引用 1 楼 starfd 的回复:
你根本就连正则里面组的概念都没搞懂……
把那段代码当成文本。我需要获取下列代码的类名,方法名,参数,而且参数对应方法,方法对应类 就是说,通过正则表达式,我想要知道这段代码里面有哪些class,这些class里面有哪些方法,这些方法里面有哪些参数 这是我写的三条正则表达式: 查找类:(?<Class>(?<=\bclass\s)\w+\b) 查找方法: (?<method>(?<=function ).*(?=\s*\{\s*)) 查找参数: (?<parameter>(?<=I\().*(?=\))) 然后我没搞清楚组的概念那应该是怎样才对?你说说你的看法呀,别只说一句话....我很郁闷的。 另外我要怎样做才能得到我想要的结果呢?
gw6328 2015-08-06
  • 打赏
  • 举报
回复
你就说你想取什么结果吧。
  • 打赏
  • 举报
回复
你根本就连正则里面组的概念都没搞懂……

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧