Regexp bakmak arkasında internet hızları maç

2 Cevap php

Yani kullanıcı yüzden ben bir hız arama yerine dize arama kullanabilirsiniz "10" yakalamak istediğiniz sonra "10 mbit" için arama olabilir. Bu aşağıda sıradanifade bu cezayı yapar, bir sorun değildir:

if (preg_match("/(\d+)\smbit/", $string)){ ... }

Ancak, kullanıcı "10/10 mbit" veya "10-100 mbit" gibi bir şey için arayabilirsiniz. Ben yukarıda regexp ile eşleşen istemiyorum - onlar başka bir şekilde ele alınmalıdır. Yani "10 Mbit" numara bir kelime olarak tüm sayısal ise (yani boşluk, yeni satır veya lineend / linestart içerdiği) maçları regexpi istiyorum

Geriye bakan kullanarak, bu yaptım:

if (preg_match("#(?<!/)(\d+)\s+mbit#i", $string)){

"10/10 mbit" demek ki burada yanlış bir şey yapıyorum, ama ne:? Sadece yok "/" Onlardan önce, ama bu dize için gerçek eşleşen o yakalamak için

2 Cevap

Eğik çizgi veya tire hakkında bakım tek şey ise, bunu yapmak gerekir:

'#(?<![\d/-])(\d+)\s+mbit#i`

Lütfen regex sorunu \d+ Sadece bir rakamı maç için gerekli olmasıdır. Bu bir bölü öncesinde çünkü 10 10/10 mbit eşleşmiyor, ama 0 değildir yapabilirsiniz. Emin numaranın başından itibaren maçları yapmak için, bunun öncesinde edilemez şeyler listesinde \d içermek zorunda.

Sen lookback iddia negatiftir. Bu dize / öncesinde olmamalıdır söyler

(Regex sadece "10" maç olamaz: Eğer iddiasıyla explicitely onu korusun) Yani / dize içinde eşleşti. Belki bir Pozitif Geriye İlerleme istedi?