卡在正则表达式我不知道如果它甚至可能或不使用PHP preg_match_all


stuck in regular expression i dont know if it is even possible or not using php preg_match_all

我有一个文件,我想要一个特定的数据下面是样本数据

 moduleHelper.addModule('REC');
  moduleHelper.addModule('TOP');

我想要的是

anything.anything("x"),即

moduleHelper.addModule('');

以上就是我想要的返回值

我只是不希望'x'部分不包含单引号。

我自己试着写了一个正则表达式,如下所示。

/(.*)'.(.*)'(''[^.*]''')/mi

它没有给我任何东西,根据PCRE手册[]里面的^做否定??

可以用preg_replace_callback来完成,如果你想弄清楚所有的反向引用是如何工作的,但我认为这更容易一点:

// the regex
$regex = "/(?P<FIRST>.+)?'.(?P<SECOND>.+)'('(?P<PARAM>.+)?''')?/mi";
$subject = <<<EOB
moduleHelper.addModule('REC');
moduleHelper.addModule('TOP');
EOB;
$matches = array();
$numberOfMatches = preg_match_all($regex, $subject, $matches, PREG_SET_ORDER);

$results = array();
foreach($matches as $match)
{
    array_push($results, sprintf("%s.%s('')", $match['FIRST'], $match['SECOND']));
}
print_r($results);
// result:
Array
(
    [0] => moduleHelper.addModule('')
    [1] => moduleHelper.addModule('')
)

尝试使用以下

/^([^.]+)'.([^'(]+)/

如果^是[]中的第一个字符,则它否定集合中的其他字符。其中[ab]接受a或b, [^ab]接受非a或b的任何字符。

我也不知道你想要什么。你说你不想要那个"x",但你到底想要什么?

它确实做否定。在这种情况下,[^.*]表示"获取而不是 .*的字符"。我觉得你想要下面的,但我不能完全确定。

preg_match_all( "/('w+'.'w+)(?='(['"']'w+['"']');)/i", $string, $matches);

试试这个:

 /([^.]*)'.([^.]*)'(.*')/