2

正規表現を使用してリストから名前を除外するにはどうすればよいですか?

データ:

$subject=
"Damon Carson Stovall,
Bret Roman Mikulak,
Jack Filiberto Quirke,
Elroy Forrest Jarnagin,
Ulysses Wiley Cregger,
Brent Greg Jonah,
Bret Armand Daylong,
Ned Numbers Vandell,
Bret Alden Cutlip,
Bret Chung Markie,";

正規表現:

// Select anyone with the first name of Bret
$pattern = "/Bret /";

私の現在の解決策:

// Loop through & Skip any line that matches Bret.
$subject_array = explode(",",$subject);

foreach($subject_array as $line)
  if(!preg_match($pattern, $line))
    echo "$line<br>";
4

2 に答える 2

2

Bretはい、名前にない行を選択できます

/^(?!Bret\b).*$/im

i大文字と小文字を区別しないオプションです

m複数行オプションです

^文字列の開始を示します

\b非単語を表すboundary

(?!Bret\b)ですnegative lookahead

^(?!Bret\b).*$そのため、先読みが true の場合にのみ文字列を選択します...つまり、文字列が!.*で始まらない場合Bret

于 2012-12-06T19:00:56.833 に答える
0

あなたのパターンは非常に単純なので、 preg_match() マニュアルページの「メモ」ボックスによると、より高速であるため、むしろ使用する必要がstrpos()あります。stripos()

<?

$subject = '
    Damon Carson Stovall,
    Bret Roman Mikulak,
    Jack Filiberto Quirke,
    Elroy Forrest Jarnagin,
    Ulysses Wiley Cregger,
    Brent Greg Jonah,
    Bret Armand Daylong,
    Ned Numbers Vandell,
    Bret Alden Cutlip,
    Bret Chung Markie,';

$pattern = 'Bret ';

$subject_array = explode(',', $subject);

foreach($subject_array as $line)
    if (strpos(trim($line), $pattern) !== 0)
        echo $line . '<br />';
于 2012-12-06T19:52:55.797 に答える