2017-06-05 20 views
1

に電話番号の前にテキストを探すだから私は、次のように私に与えられた文字列のリストを持っている:文字列の正規表現PHP

David palmer & Betsy Harrell 229-548-9651 Emily 

私はこれを行うことによって、その文字列のうち、電話番号を取得する方法を知っている:

preg_match_all('/[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches); 
$matches = $matches[0]; 

しかし、私は手前の名前と電話番号を取得する必要があります。これは私の正規表現知識を少し超えています。だから、私は2つの部分文字列を取得するために

David palmer & Betsy Harrell 

229-548-9651 
+0

正規表現に '。*'を単に追加しますか? – horcrux

答えて

1

使用キャプチャグループを必要とする:

$s = 'David palmer & Betsy Harrell 229-548-9651 Emily'; 
if (preg_match('~^(.*?)\s*(\d{3}-\d{3}-\d{4})~', $s, $m)) { 
    echo $m[1] . "\n" . $m[2]; 
} 

PHP demoを参照してください。

パターンを詳細:

  • ^ - 文字列
  • (.*?)の開始 - 任意の0+できるだけ少ないように改行文字以外の文字までの最初の...
  • \s*へ - 0 +空白
  • (\d{3}-\d{3}-\d{4}) - 日付パターン(3桁、-、3桁、-、4桁)

-を文字クラスに入れる必要はなく、文字クラス以外でエスケープする必要はありません。 \dは、Unicodeに関連する特定の修飾語/ PCRE動詞を使用しない場合は[0-9]に等しくなります。