2016-06-15 2 views
0

Domingos: 10H00 a 20H00 или этот Domingos: 10H00 a 20H00.preg_match до конца строки или другой возможности

Я пытался подогнать матч в зависимости от того, какая из двух строк - это конец конца строки или до "."

Я пробовал так, но это не работает.

if(preg_match('/ingo(.*?)a(.*?)($|.)/is', $obj["horarios"], $horaDom){ 

} 

Выходной сигнал, что я хочу: «10:00» и «20:00»

Каждый знает, как это сделать?

+0

подобно [ ' '~^[^] + ~.' '] (Https://regex101.com/r/gV2bG4/ 1)? Каков результат, который вы хотите получить? –

+0

Что точно не работает. Символ fullstop/period в RegEx означает «Любой символ». Вам нужно избегать этого: if (preg_match ('/ ingo (. *?) A (. *?) ($ | \.)/Is', $ obj ["horarios"], $ horaDom) { } –

+0

Выход, который я хочу, это: «10h00» и «20H00» – Marchu

ответ

0

Вы можете использовать

/(\d+H\d+)\s*a\s*(\d+H\d+)/ 

или даже (чтобы сократить шаблон, (?1) будет повторно использовать шаблон внутри группы 1)

/(\d+H\d+)\s*a\s*((?1))/ 

regex demo Смотрите (или this one).

В (\d+H\d+) матчи и захватывает в 1-й группе один или более цифр, H, и 1 или более цифр, \s* спички 0+, пробелы a спички a.

PHP demo:

$re = '/(\d+H\d+)\s*a\s*((?1))/'; 
$str = "Domingos: 10H00 a 20H00\nDomingos: 10H00 a 20H00."; 
preg_match_all($re, $str, $matches, PREG_SET_ORDER); 
print_r($matches); 
Смежные вопросы