在字符串的开头匹配一个斜杠或两个括号

时间:2012-08-27 16:42:38

标签: php regex

我似乎达到了我的正则表达式知识限制而且我的google-fu失败了。

我尝试不匹配字符串,其中preg_match以一个或多个斜杠开头,或者(对我来说很棘手)((

我原来用来匹配/看起来像那样:

\^[^\/].*$\

它工作得很漂亮。但是,当我尝试匹配字符串开头的两个括号时,我失败了。我会发布我尝试的所有方法,但我不认为添加它们会澄清。

我能做的最好的事情就是将括号添加到角色类中,哪种类型有效,但已经有一个括号:

\^[^\/(].*$\

示例:

字符串: 你好

期望的结果: 匹配

字符串: /你好

期望的结果: 没有匹配

字符串: //你好

期望的结果: 没有匹配

字符串: (你好

期望的结果: 匹配

字符串: ((你好

期望的结果: 没有匹配

我真的希望你能给我一个正确的方向。

由于

2 个答案:

答案 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}.*$\ 

可能?