Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Модифицировать регулярку для поиска цифр / 7 сообщений из 7, страница 1 из 1
27.10.2019, 00:37
    #39882003
morgot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Есть регулярка, для поиска номеров телефонов в тексте (не верификация поля ввода, а именно в тексте, т.е. нельзя ограничивать символами начала и конца строки).

Код: php
1.
$p ="/((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}/";



Проблема в том, что под эту регулярку попадают вот такие строки
Код: html
1.
date=1572019480]



Как можно модифицировать регулярку, чтобы если перед номером есть '=' или после символ ']' - то отклонять? Т.е. после (или до) цифр может идти что угодно, кроме вот этих двух символов.
...
Рейтинг: 0 / 0
27.10.2019, 01:21
    #39882004
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Посмотрите страницу https://www.php.net/manual/ru/regexp.reference.assertions.php

Фрагменты оттуда:
авторА foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". авторНапример, (?<!foo)bar найдёт вхождения "bar", которым не предшествует "foo".
...
Рейтинг: 0 / 0
27.10.2019, 11:13
    #39882034
morgot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Почему-то не работает. Пробовал и так
Код: html
1.
((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}(?!\])


и так
Код: html
1.
(?!=)((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}


все равно находит
...
Рейтинг: 0 / 0
28.10.2019, 23:05
    #39882499
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Советую поменять тактику
Код: php
1.
2.
3.
$p = '/[^\=\d]{2}(((8|\+7)[- ]?)?'
	.'(\(\d{3}\)|\d{3}[- ]?)?'
	.'([\d- ]{7,12}))[^\d\]]{2}/';
...
Рейтинг: 0 / 0
28.10.2019, 23:17
    #39882501
TolikD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Хотя посмотрел, в принципе то же самое, что и у вас
Код: php
1.
$p ="/[^\d=]{2}((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,12}[^\d\]]{2}/";


Весь секрет в выражениях [^\d=]{2} и [^\d\]]{2}. Можно подумать, как ограничиться одним символом [^=] [^\]], но я считаю, что этого будет достаточно для большинства случаев.
...
Рейтинг: 0 / 0
29.10.2019, 00:25
    #39882514
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
Думается, вряд ли получится одним простым выражением отловить точно все варианты. Переменное количество символов в необязательных фрагментах "((8|\+7)[\- ]?)?" и "(\(?\d{3}\)?[\- ]?)?", да и вариантов в "[\d\- ]{7,12}" думается, слишком велико. В данном случае из "=1572019480]" легко берется фрагмент по условию "от 7 до 12", так, что рядом оказываются вполне приемлемые цифры, а не нежелательные символы.
Можно попробовать сделать несколько регекспов с более жесткими правилами. Вряд ли это будет самым хорошим способом. Впрочем, других мыслей собрать искомое за один проход пока нет. За два или за три, нормализуя данные, можно, конечно. Оно и проще, скорее всего.
...
Рейтинг: 0 / 0
29.10.2019, 02:24
    #39882531
morgot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модифицировать регулярку для поиска цифр
TolikD , спасибо, все работает. Строка с date пропала, а это главное, т.к. эта строка была в каждом втором посте.

vkle , да там много мусора попадает,вида id=1318533. Но я сделал еще чуть иначе, добавил

Код: php
1.
2.
3.
$res = filter_var($mm[0],FILTER_SANITIZE_NUMBER_INT);	
		if (strlen($res) < 10)
			continue;



правда, и после такой валидации остаются строки вида -------------- , но это уже приемлемо плюс-минус.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Модифицировать регулярку для поиска цифр / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]