Rumah > Soal Jawab > teks badan
Padan dengan rentetan "abc 123". Minta keluarkan abc dan 123.
<?php
$str = "abc 123";
$preg = "/^(.*?)\s+(.*?)$/";
$preg1 = "/^(.*?)\s*(.*?)$/";
preg_match($preg, $str, $tmp);
preg_match($preg1, $str, $tmp1);
echo '<pra>';
print_r($tmp);
print_r($tmp1);
echo '</pre>';
// $tmp
Susunan
(
[0] => abc 123
[1] =>
[2] =>
)
// $tmp1
Susunan
(
[0] => abc 123
[1] =>
[2] => abc 123
)
Mengapa hasil padanan berbeza?
伊谢尔伦2017-05-16 13:10:16
Tiada dua pelajar pertama menjawab langsung.
Biar saya jawab,
惰性(或叫非贪婪)匹配
的规则:
星号或加号后跟个问号,就表示惰性匹配,意思是尽可能少的匹配。
/(.*?)s+/
,加号表示前面的匹配(也就是空格s) 出现1次或多次。 这段的意思是尽可能少的匹配,后面至少有一个空格s。 这么看,前面这个括号它能匹配到 abc。
/(.*?)s*/
Asterisk atau tanda tambah diikuti dengan tanda soal menunjukkan pemadanan malas, yang bermaksud padanan sesedikit mungkin.
阿神2017-05-16 13:10:16
Sila ambil perhatian bahawa keputusan kad bebas biasa s+ dan s* pasti berbeza. "*"
匹配前面的子表达式零次或多次。例如,zo能匹配“z"以及"zoo"。等价于{0,}。"+"
sepadan dengan "z" dan "zoo".
"+"
Memadankan subungkapan sebelumnya satu kali atau lebih. Contohnya, "zo+" sepadan dengan "zo" dan "zoo", tetapi bukan "z". + adalah bersamaan dengan {1,}.
/^(.
?)$/
"/" di hadapan dan "/" di belakang menunjukkan bahawa permulaan dan akhir tidak mempunyai makna praktikal.
"^" pertama bermaksud memadankan permulaan teks
() ialah keutamaan dari kiri ke kanan "." bermaksud memadankan mana-mana aksara, "*" bermaksud memadankan lebih daripada 0 kali
s ialah sebarang aksara ruang putih
🎜Cadangkan tutorial untuk anda pelajari: pengenalan 30 minit kepada ungkapan biasa🎜PHPz2017-05-16 13:10:16
Betulkan jawapan, ia disebabkan oleh pemadanan yang malas, yang juga merupakan salah satu kesukaran ekspresi biasa.
Apa yang dipanggil padanan malas boleh difahami dengan cara yang popular: jika anda tidak memberitahunya bahawa ada sesuatu di hadapannya, ia tidak akan pergi. Dalam peraturan biasa pertama, anda memberitahunya untuk pergi ke hadapan dan berhenti apabila ia menemui sekurang-kurangnya satu ruang untuk mengiranya sebagai padanan.
Peraturan biasa kedua, anda menyuruhnya untuk bergerak ke hadapan atau ia boleh dikira sebagai padanan jika ia sangat malas dan hanya berhenti bergerak.