我似乎达到了我的正则表达式知识限制而且我的google-fu失败了。
我尝试不匹配字符串,其中preg_match
以一个或多个斜杠开头,或者(对我来说很棘手)((
我原来用来匹配/看起来像那样:
\^[^\/].*$\
它工作得很漂亮。但是,当我尝试匹配字符串开头的两个括号时,我失败了。我会发布我尝试的所有方法,但我不认为添加它们会澄清。
我能做的最好的事情就是将括号添加到角色类中,哪种类型有效,但已经有一个括号:
\^[^\/(].*$\
示例:
字符串: 你好
期望的结果: 匹配
字符串: /你好
期望的结果: 没有匹配
字符串: //你好
期望的结果: 没有匹配
字符串: (你好
期望的结果: 匹配
字符串: ((你好
期望的结果: 没有匹配
我真的希望你能给我一个正确的方向。
由于
答案 0 :(得分:1)
嗯,可以通过前瞻性的方式构建模式:
$testStrings = array(
'Hello', '/Hello', '//Hello', '(Hello', '((Hello'
);
foreach ($testStrings as $test) {
echo $test . ' is ' .
( preg_match('#^(?!/{1,2})(?!\(\()#', $test ) ? ' matched' : 'not matched ' )
. '<br/>';
}
/** prints...
Hello is matched
/Hello is not matched
//Hello is not matched
(Hello is matched
((Hello is not matched
*/
关键是你要对两种情况进行“否定检查” - 一个或两个forslashes或至少两个括号 - 在字符串开始锚之后。
我不知道,应该用'/// Hello'和'(((Hello'字符串,你是否打算让它们不匹配 - 或不是。
答案 1 :(得分:0)
检查一下:
\^[^/(]{2}.*$\
可能?