Задать вопрос
@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] => 
        )
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что пробелы жадно забираются, надо использовать lookahead и lookbehind
(?<=\s|^):\s?-?\s?\)(?=\s|$)
https://regex101.com/r/90Z9wL/1
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
А вот такой патерн попробовать:
(:\s*-?\s*\)) или (?=):\s*-?\s*\)(?=)

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽