Добрый день! В регулярных выражениях не профи и уже весь мозг сломал :-((. В цикле перебираются строчки: Код (Text): Title Sub title Super title sub title super Т.е. некоторые содержат 4 пробела в начале, некоторые 5. Нужно найти только те, которые содержат 4 пробела в начале: "Title" и "Super title" пытаюсь вытащить Код (Text): preg_match('/^\s{4}[a-zA-Z0-9]{3,}$/is', $mystring, $matches); в итоге тащится только "Title", что понятно, т.к. "Super title" содержит пробел. Меняю на Код (Text): preg_match('/^\s{4}[a-zA-Z0-9\s]{3,}$/is', $mystring, $matches); в итоге тащатся все заголовки, что тоже в приниципе понятно. Непонятно как сделать так, чтобы тащились только "Title" и "Super title" а, те что содержат больше чем 4 пробела в начале игнорировались. Помогите пожалуйста!
По условию там строго пробел, а метасимвол \s это пробел, табуляция, символы новой строки и возврата каретки. PHP: $mystring = ' Title Sub title Super title sub title super '; preg_match_all('/^ {4}\w.*/m', $mystring, $matches); var_dump($matches[0]);
если в цикле перебираются и если нужны просто эти строчки то можно же без регулярки обойтись? искать substr($txt, 0, 8) и проверять обрезанное)
2Emilien, спасибо, да то что нужно! 2Алекс8, спасибо! На самом деле, действительно можно было бы без регулярки обойтись, но вроде регулярка красивее. Там еще момент, что нужно только на английском искать, но вроде пока и так все нормально.
Без регулярок. PHP: $array = [ ' Title', ' Sub title', ' Super title', ' sub title super' ]; foreach ($array as $line) { if (strspn($line, ' ') == 4 AND isset($line[4]) AND ctype_alnum($line[4])) { echo $line, "\n"; } }