【问题标题】:String matching with regular expression字符串匹配正则表达式
【发布时间】:2013-08-11 03:35:21
【问题描述】:

我正在尝试使用正则表达式在字符串中查找匹配项,但无法正常工作。 我想匹配function gcb_process的出现。

这就是我所做的:

$gatewayname = basename($path, ".php");
$contents = file_get_contents($path);
$searchname = $gatewayname . "_process";

preg_match("/function\s*".$searchname."/i", $contents, $matches);

我总是收到警告:

警告:preg_match_all():编译失败:偏移 11 处没有可重复的内容

这是怎么做到的?

【问题讨论】:

  • 警告与您在此处显示的 PHP 代码无关。您需要向我们展示您调用preg_match_all() 的代码,而不是preg_match()
  • 我实际上使用了 preg_match_all 而不是 preg_match
  • “这就是我所做的:” preg_match("/function\s*gcb_process/i", $contents, $matches);
  • 您需要准确地向我们展示您运行的代码,以及准确地您收到的错误消息。否则,我们无法帮助您。释义和总结不算在内。
  • 只是一个注释,它是\s+ 而不是\s*,因为至少会有一个空格字符。

标签: php regex


【解决方案1】:

已测试:

$subject = "I want to match occurence of function gcb_process.";
$pattern = '/function gcb_process/';
preg_match($pattern, $subject, $matches);
print_r($matches);

输出:

Array ( [0] => function gcb_process )  

阅读PHP Doc更多详情

【讨论】:

  • 好的,我在 $gateway 中没有得到正确的值,而我得到了 。因此 $searchname 是 "_process 和错误。
  • 你能告诉我们$searchname的值吗,你可以echo $searchname;要得到。让我们有更好的想法
  • $searchname 值是没有 php 扩展名的文件名。在本例中为 gcb.php。我的网关在 _process 前面添加了文件名。我实际上能够检测到错误并现在工作。 $gatewayname 没有得到正确的值。谢谢大家。