我正在寻找一个正则表达式,我可以在我的分词器中使用它来编译配置文件。以下是 php 中一个类的片段:
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"是"混合"。
我如何在一个模式中写下这个"和不"?
谢谢。
此模式将匹配至少包含一个斜杠的任何字母、数字、下划线、连字符和斜杠序列:
[a-zA-Z0-9-_/]*'/[a-zA-Z0-9-_/]*
因此,这使您可以大致了解如何在匹配ab/c
时拒绝像abc
这样的令牌。 这与区分浮点常量和整数常量非常相似。
您可能应该将像foo/bar(255)
这样的输入标记为四个标记:foo/bar
(
255
和 )
。
否则,强制执行此斜杠要求会很复杂。幼稚的方式意味着MIXED
可以是这样的:
foo(255/255)
foo(/)
甚至:
)/-
仅仅因为它在某处包含斜杠,不一定是您想要的地方。
明确您的要求。