【发布时间】:2012-04-07 17:59:09
【问题描述】:
我正在寻找一个正则表达式,我可以在我的标记器中使用它来编译配置文件。这是 php 中的一个类的 sn-p:
private $token = array(
"PATH" => "([a-zA-Z\_-]+\.|\*\.)+([a-zA-Z\_-]+|\*)",
"MIXED" => "[a-zA-Z0-9-_\(\)\/]{2,}",
"STRING" => "[a-zA-Z-_]{2,}"
);
private function getToken($string) {
foreach($this->token as $name => $pattern) {
preg_match("/^".$pattern."/", $string, $match);
if(!empty($match))
return array($name, $match[0]);
}
return false;
}
“MIXED”应该匹配“foo/bar”而不是“foobar”,“STRING”应该匹配“foobar”而不是“foo/bar”。目前“foobar”和“foo/bar”是“混合”的。
我如何在一个模式中写下这个“AND NOT”?
谢谢。
【问题讨论】:
-
"混合" => "[a-zA-Z0-9-_()]+\/[a-zA-Z0-9-_()]+"
-
更准确地说:“MIXED”也是“foo()”、“foo(255)”
-
美洲狮走在正确的道路上。您想要表达的想法是“至少包含一个斜线”。
-
哪种解析策略?第一场比赛?最大的匹配?
-
第一场比赛。至少是一个“字符”。