@DenKapone

Регулярное выражение, почему через раз?

Всем привет.
Почему через раз находит, не могу понять.
preg_match_all("~([\s]+|^):[\s]?-?[\s]?\)([\s]+|$)~", ":) : -) :- ) :-) : - )", $m);
print_r($m);


Array
(
    [0] => Array
        (
            [0] => :) 
            [1] =>  :- ) 
            [2] =>  : - )
        )

    [1] => Array
        (
            [0] => 
            [1] =>  
            [2] =>  
        )

    [2] => Array
        (
            [0] =>  
            [1] =>  
            [2] => 
        )
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что пробелы жадно забираются, надо использовать lookahead и lookbehind
(?<=\s|^):\s?-?\s?\)(?=\s|$)
https://regex101.com/r/90Z9wL/1
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
А вот такой патерн попробовать:
(:\s*-?\s*\)) или (?=):\s*-?\s*\)(?=)

Вообще не понимаю зачем вам разделитель пробел, а если написать больше одно пробела внутри смайла
Ваш патерн его вообще пропустит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы