2017-06-10 6 views
2

してください。は、私は次の式を持つ負の先読み大文字と小文字を区別しない

$str = array( 
    "I like this sentence.", #line1 
    "I like that sentence.", #line2 
    "I link THAT sentence." #line3 
); 

一致は大文字と小文字が区別され、したがって、線のみ1および3は一致している:

私は、次の3つの文を持っています。ここまでは順調ですね。

しかし、それだけで1行目と一致するように、私は、それは大文字と小文字を区別しないしたいと思い、私はインライン修飾子、つまり「(-i ...?)」で試してみました:

$exp = "/^(?!.*?(?i:that)).*$/"; 

とフラグとして、すなわち "/ .../I":

$exp = "/^(?!.*?that).*$/i"; 

が、無駄に。

私は、次のループで検索を実行します。出力と

foreach($str as $s) { 
    preg_match_all($exp, $s, $matches); 
    var_dump($matches); 
} 

array (size=1) 
    0 => 
    array (size=1) 
     0 => string 'I like this sentence.' (length=21) 
array (size=1) 
    0 => 
    array (size=0) 
     empty 
array (size=1) 
    0 => 
    array (size=1) 
     0 => string 'I link THAT sentence.' (length=21) 

とオンラインデモはこちらです:https://regex101.com/r/bs9rzF/1

私はおよそ任意のヒントに感謝だろう私は正規表現を大文字と小文字を区別しないようにすることができます。

EDIT:一部の投稿者が正しく指摘するように、私は間違って "?-i"の代わりに "?-i"を使用していました。今修正されました。

+1

'$ exp =" /^(?!.*?)* $/i ";"は正しく、正しく動作するはずです。しかし、 '(?-i:...'はi修飾子をオフにします。 '(?i:...') –

+1

'$ exp =" /^(?!.*?that )* $/i ";' [**は動作するはずです**](https://3v4l.org/sEXhn) – revo

+0

実際、i修飾子に関係なく、大文字と小文字を区別して検索する問題があるようですelse:アクセントや他のアルファベットを持つ言語、すなわち '' /^(?!.*?)にもuフラグが必要です。* $/ui "'あなたの素早い答えをありがとう! – msoutopico

答えて

2

最初の正規表現^(?!.*?that).*$は、大文字と小文字の区別がないため、修飾語を使用しないため大文字と小文字の区別がありません。あなたの正規表現はは、3番目の文では(第1、第3番目の文のために真である、文、単語でthat(ここに敏感場合)がないべきであると言っているので

正規表現は、最初と3番目の文に一致しますあなただけの最初の文に一致させるにはと同じではありません

を持って、あなたは

のようなインライン修飾子(?i)を使用することができます

here

を参照してください。ところで、あなたの/^(?!.*?that).*$/i正規表現も正しいです。

2

あなたが接近していた:

^(?!.*?(?i)that).*$ 

a demo on regex101.comを参照してください。あなたの式((?-i))では、修飾子から外していました。

関連する問題