我有一个文件,我想要一个特定的数据下面是样本数据
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);
试试这个:
/([^.]*)'.([^.]*)'(.*')/