否定された文字クラスを使用します ( rubular.com を参照):
/^([^:]*):(.*)$/m
は文字クラス[…]
です。likeは、小文字の母音のいずれかと一致します。否定文字クラスです。小文字の母音以外のいずれかに一致します。[aeiou]
[^…]
[^aeiou]
パターンの最初と最後にある と は、行^
アンカーの開始と終了です。修飾子は、マルチライン モードをオンにします。$
m
.
元のパターンの問題は、もっと具体的にすることができたときに(ab) を使用していること*
です。繰り返しを消極的にすることによってそれを「修正」しようとするのは魅力的ですが、より具体的に言って、最初のグループが:
.
ただし、これはキャプチャを使用した一致パターンであることに注意してください。実際には、区切り記号のみに一致する分割パターンではありません。区切り文字のパターンは本当に:
.
関連する質問
PHP スニペット
これを考えると:
$text = <<<EOT
Company Name: Name of the company, place.
Company Address: Some, address, here.
Link: http://www.somelink.com
EOT;
preg_match_all('/^([^:]*):(.*)$/m', $text, $matches, PREG_SET_ORDER);
print_r($matches);
出力は次のとおりです ( ideone.com で見られるように):
Array
(
[0] => Array
(
[0] => Company Name: Name of the company, place.
[1] => Company Name
[2] => Name of the company, place.
)
[1] => Array
(
[0] => Company Address: Some, address, here.
[1] => Company Address
[2] => Some, address, here.
)
[2] => Array
(
[0] => Link: http://www.somelink.com
[1] => Link
[2] => http://www.somelink.com
)
)