我无法找到与 php 类的开始和结束字符(分别为 { 和 })匹配的正则表达式。如果 { 和 } 位于 php 注释内,正则表达式也不应该匹配它们,换句话说,如果 { 或 } 前面有除空格之外的任何字符,则它不应该匹配。
我想我应该使用负向查找,但我对正则表达式有点生疏,到目前为止我还没有找到解决方案。
这是我的测试字符串:
<?php
namespace Ling\Light_TaskScheduler\Service;
/**
* The LightTaskSchedulerService class. :{
*/
class LightTaskSchedulerService
{
/**
*
* This method IS the task manager.
* See the @page(Light_TaskScheduler conception notes) for more details.
*
*/
public function run()
{
$executionMode = $this->options['executionMode'] ?? "lastOnly";
$this->logDebug("Executing run method with execution mode \"$executionMode\".");
}
}
// this can happen in comments: }, why
// more stuff
我的模式目前不起作用,是这样的:
if(preg_match('!^\s*\{\s*(.*)(?<![^\s]*)\}!ms', $c, $match)){
a($match);
}
所以,我使用了多行修饰符“m”,因为我们需要解析多行字符串,然后我使用了“s”修饰符,以便点与换行符匹配,但然后在部分 (?<![^\s ]*) 似乎不起作用。我基本上是想说,如果“}”字符前面没有空格,则不匹配它。
@Wiktor Stribiżew:我尝试了这种模式,但它仍然不起作用:!^\s*\{\s*(.*)(?<!\S)\}!ms
考虑到 Tim Biegeleisen 的评论,我可能会采取一种更简单的方法,例如先删除注释,然后执行更简单的 regex !^\s*\{\s*(.*)\}!ms,我知道这会起作用。
但是,如果有人知道可以执行此操作的正则表达式,我将有兴趣查看它。
慕妹3242003