За последние 24 часа нас посетили 14997 программистов и 1768 роботов. Сейчас ищут 1519 программистов ...

Регулярки. Проблемы с Casesensivity

Тема в разделе "Регулярные выражения", создана пользователем MinusG, 9 дек 2015.

  1. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Доброго времени суток!
    Написал регулярное выражение, но почему-то в нем не работает Casesensivity
    Может само выражение написано не верно? Я новичок, прошу сильно не пинать.

    У меня есть многострочный текс в котором встречаются выражения типо: xxxxx подъезд:3 xxx xxxx квартира:156 xxxxx xxx дом:19 xxxx тип:многоэтажный xxx и т.д. Причем регистр может быть любой, например такой пОдЪЕзд:
    Пытаюсь скрыть из текста тип, номера домов, подьездов, квартир...
    В идеале конечно бы оставлять слово подъезд: а убирать только сам номер или весь текст идущий после, например, тип: и до пробела

    Код (PHP):
    1. $replace = 'скрыто';
    2. $patterns = "/((подъезд|квартира|дом|тип)(\:).+)/i";  
    3. $txt=preg_replace($patterns, $replace, $txt);  
    Но данное выражение не зависимо от /i почему-то чувствительно к регистру и пОдьЕзд: не признает.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    что лежит в $txt ? и в какой кодировке?
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там где /i сделай так /iu пальцем в небо, но может сработает и про кодировку сообщи, что выше спросили.
     
  4. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    массив строк, charset=windows-1251
    с Casesensivity разобрался, оказывается код норм работает, была проблема с раскладкой.

    Помогите со второй часть вопроса, пожалуйста
    В идеале конечно бы оставлять слово подъезд: а убирать только сам номер подьезда или убирать весь текст идущий после тип: и до пробела
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    MinusG покажи пример текста до обработки и второй текст который хочешь получить в результате
     
  6. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Пример текста:
    Новый дом воздвигнут в поселке, посреди лесного массива, скорее всего тип:многоэтажный там будет подъездов:5 в любом случае дом:54 получит такую же архитектуру как и дом:52 или что-то очень схожее.
    Вот такая есть информация ....


    Надо:
    Новый дом воздвигнут в поселке, посреди лесного массива, скорее всего тип:скрыто там будет подъездов:скрыто в любом случае дом:скрыто получит такую же архитектуру как и дом:скрыто или что-то очень схожее.
    Вот такая есть информация ....


    Регистр букв может отличаться
     
  7. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    помогите пожалуйста с регулярным выражением. Спасибо!
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а тему надо в форум "за меня" или "фриланс"?
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
  10. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    не совсем понял это как и куда? помимо цифр еще может быть и текст например тип: более того цифры могут одиночно стоять в тексте. Выше это кусок текста
     
  11. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Все еще нужна ваша помощь в написании выражения...
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Код (PHP):
    1. $replace = ':скрыто';
    2. $patterns = "/(\:\d+)/i";  
    3. $txt=preg_replace($patterns, $replace, "Новый дом воздвигнут в поселке, посреди лесного массива, скорее всего тип:многоэтажный там будет подъездов:5 в любом случае дом:54 получит такую же архитектуру как и дом:52 или что-то очень схожее");
    4. var_export($txt);  
     
  13. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Спасибо конечно, но в тексте не только цифры после двоеточия, а еще и текст нужно скрывать порой!
    дом:54, подъезд:5, тип:многоэтажный

    Код (PHP):
    1. $patterns = "/(\:\d+)/i"; 
    Как я понимаю только к цифрам относится.
    И еще, двоеточие может в тексте встретиться в других местах, например: Цитирую:"Дом будет сноситься"
    Также цифры могут отдельно быть в тексте например дата или время: Еще 25.04.15 была стройка
    Вот такие выражение, двоеточия, даты и цифры вообще трогать не нужно.

    Я хочу именно задать слова с двоеточиями которые хочу экранировать! В стиле:
    Код (PHP):
    1. $patterns = "/((подъезд|квартира|дом|тип)(\:).+)/i";   
    и скрыть все что идет от двоеточия до пробела, оставив открытыми сами слова которые я указал в перечне.
    Чтобы получилось так: подъезд:скрыто, квартира:скрыто, дом:скрыто, тип:скрыто
    Этот код работает, но скрывает все целиком и искоемое слово в перечне и двоеточие и сам текст\цифру

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  14. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $str = 'Новый дом, скорее всего тип:многоэтажный, там будет подъездов:5, в любом случае дом:54 получит такую же архитектуру как и дом:52. Цитирую:Дом будет сноситься';
    2. echo preg_replace("/(тип|дом|подъезд(а|ов)?)\:[а-яё0-9]+/iu", '$1:СКРЫТО', $str); 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  15. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Спасибо огромное!!! Это то что надо.

    Маленькое уточнение. А '$1:СКРЫТО' - вот этот момент нельзя как-то в регулярное выражение всунуть?
    Потому как у меня переменная на которую заменяется текст это массив и там другие замены идут.

    Код (PHP):
    1. $patterns = array();
    2. $patterns[0] = "/((https|http)+(s)?:(\/\/)(\w)(.[\w]+)([\w\-\.,@?^=%&:;\/~\+#]*[\w\-\@?^=%&:;\/~\+#])?)/i";
    3. $patterns[1] = "/(?:\\+)?[78](?:\\s|-)*[\\(]?(\\d{3})?[\\)]?(?:\\s|-)*(\\d{3})(?:\\s|-)*(\\d{2})(?:\\s|-)*(\\d{2})/";
    4. $patterns[2] = "/(тип|дом|подъезд(а|ов)?)\:[а-яё0-9]+/iu";
    5. $replace = 'скрыто';
    6. $txt=preg_replace($patterns, $replace, $txt);  
    Если ставить
    Код (PHP):
    1. $replace = '$1:скрыто';  
    то ломаются условия с ссылками и телефонами...

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  16. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $patterns = array();
    2. $patterns[0] = "/((https|http)+(s)?:(\/\/)(\w)(.[\w]+)([\w\-\.,@?^=%&:;\/~\+#]*[\w\-\@?^=%&:;\/~\+#])?)/i";
    3. $patterns[1] = "/(?:\\+)?[78](?:\\s|-)*[\\(]?(\\d{3})?[\\)]?(?:\\s|-)*(\\d{3})(?:\\s|-)*(\\d{2})(?:\\s|-)*(\\d{2})/";
    4. $patterns[2] = "/(тип|дом|подъезд(а|ов)?)\:[а-яё0-9]+/iu";
    5. $replace = array('скрыто','скрыто','$1:скрыто');
    6. $txt=preg_replace($patterns, $replace, $txt);
     
  17. MinusG

    MinusG Новичок

    С нами с:
    9 дек 2015
    Сообщения:
    17
    Симпатии:
    0
    Большое человеческое спасибо!