За последние 24 часа нас посетили 19536 программистов и 1602 робота. Сейчас ищут 920 программистов ...

preg_match после формы post не работает

Тема в разделе "PHP для новичков", создана пользователем sumsum, 13 май 2014.

  1. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Даже не знаю как описать проблему. Есть строка которую я получаю из экселя (ну откуда это не важно) в общем как только доходит дело до регулярных выражений, а мне нужно в этой строке найти подстроку, которая ограничена скобками, например в строке "Замечательный (красивый) день" нужно найти слово "красивый" ну я использую регулярку preg_match('/\((.+)\)/', $str, $m); если жестко забить
    $str = "Замечательный (красивый) день";
    preg_match('/\((.+)\)/', $str, $m);
    то все работает а вот когда я $str получаю программно то все перестает работать.

    Почему? Когда то давно давно давно сталкивался с такой проблемой там вроде надо было перед всем сделать что то типа $str = trim($str); но я попробовал не помогает ... а что тогда.

    Помогите.

    Добавлено спустя 38 минут:
    Попробовал сделать $str = iconv( "utf-8", "windows-1251", $str);
    не помогает :(
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а так?
    preg_match('/\((.+)\)/u', $str, $m);
     
  3. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Пробовал, не помогает :(
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну так разберитесь - что лежит в строке $str когда возникает сбой в работе.
    запишите в файл. узнайте что за кодировка там. или может там нет ничего в скобках.
    регулярка рабочая. разбирайтесь с текстом
     
  5. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Я пробовал делать print($str) мне выводится то что надо
    но когда начинаю работать регуляркой то перестает работать ... Что за колдовство ...
    Кто то раньше сталкивался с задачей анализа текста, который поступает с пост формы?

    Добавлено спустя 17 минут 11 секунд:
    Сделал file_put_contents("data.txt", $str);
    получил в файле что то типа такого "&#54&#45&#50&#50&#50&#32&#1043&#1054&#1057&#1058&#32&#53&#50&#48&#45&#50&#48&#48&#50&#32&#40&#1061&#1040&#1056&#1055&#41"

    О чем это говорит? Как это преобразовать в пригодный для регулярки вид?
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $str='&#54&#45&#50&#50&#50&#32&#1043&#1054&#1057&#1058&#32&#53&#50&#48&#45&#50&#48&#48&#50&#32&#40&#1061&#1040';
    2. echo htmlspecialchars_decode($str); // 6-222 ГОСТ 520-2002 (ХА  
     
  7. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Спасибо, но все равно не хочет регулярка работать:
    function GetTxt($str)
    {
    //print $str."<br>";
    //$str = Unicode2Charset($str);
    $str = htmlspecialchars_decode($str);
    //file_put_contents("data.txt", $str);

    preg_match('/\((.+)\)/', $str, $m);
    print_r($m);
    }

    Выводится пустой массив Array ( )

    Добавлено спустя 18 минут 47 секунд:
    Ерунда какая то ... Попробовал вот так сделать:
    Код (Text):
    1.  
    2. function Unicode2Charset($str, $charset = 'Windows-1251') { // by SiMM, &#xHHHH; addition by John Profic
    3.   return preg_replace(
    4.     '~&#(?:x([\da-f]+)|(\d+))~ie',
    5.     'iconv("UTF-16LE", $charset, pack("v", "$1" ? hexdec("$1") : "$2"))',
    6.     $str
    7.   );
    8. }
    9. $str='&#54&#45&#50&#50&#50&#32&#1043&#1054&#1057&#1058&#32&#53&#50&#48&#45&#50&#48&#48&#50&#32&#40&#1061&#1040&#1056&#1055&#41&#54';
    10.     //print $str."<br>";
    11.     $str = Unicode2Charset($str);
    12.     //$str = htmlspecialchars_decode($str);
    13.     echo "<br><br>".$str;
    14.     file_put_contents("data.txt", $str);
    15.     preg_match('/\((.+)\)/u', $str, $m);
    16.     print_r($m);
    В фаил заносится в нормальной кодировке, НО все равно регулярка не обрабатывает :( что я делаю не так?

    Добавлено спустя 9 минут 9 секунд:
    P.S. Разобрался :)

    В preg_match('/\((.+)\)/', $str, $m); я скобку ) переписал и все заработало :) магия? не знаю но не думал что такое может помочь, работал на авось :)
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Хотя нет htmlspecialchars_decode не в этом случае.
    Тут придется делать свою функцию.

    Unicode2Charset($str,'utf-8') в твоем случае, если у тебя utf-8, а так, должно работать.