0

正規表現の知識の限界に達したようで、google-fu が失敗しています。

私は文字列を一致させないようにしています。preg_matchこれは、1 つ以上のスラッシュで始まるか、(そして、私にとってはトリッキーになります) ((

ちょうど一致するために使用された私のオリジナルは/そのように見えました:

\^[^\/].*$\

そして、それは美しく働きました。ただし、文字列の先頭にある 2 つのブラケットを一致させようとすると失敗します。私が試したすべてのアプローチを投稿しますが、それらを追加しても明確になるとは思いません。

私ができる最善のことは、文字クラスにブラケットを追加することでした。

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

例:

文字列: こんにちは

望ましい結果: 一致

文字列: /こんにちは

望ましい結果: 一致しない

文字列: //こんにちは

望ましい結果: 一致しない

文字列: (こんにちは

望ましい結果: 一致

文字列: ((こんにちは

望ましい結果: 一致しない

あなたが私を正しい方向に押し上げてくれることを本当に願っています。

ありがとう

4

2 に答える 2

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 
  */

ポイントは、アンカーを開始する文字列の直後の 2 つのケース (1 つまたは 2 つのフォースラッシュまたは少なくとも 2 つの括弧) を「否定チェック」することです。

ただし、'///Hello' と '((Hello' の文字列をどうすればよいかはわかりません。

于 2012-08-27T16:53:14.353 に答える
0

これをチェックして:

\^[^/(]{2}.*$\ 

多分?

于 2012-08-27T16:47:33.173 に答える