Здравствуйте. Имеется исходник страницы, на которой много записей вида PHP: <li><a href="/127.0.0.1" title="127.0.0.1">127.0.0.1</a></li> <li><a href="/%D0%9D%D1%83%D0%B1" title="Нуб">Нуб</a></li></ul> Подскажите пожалуйста регулярку(для php) которая позволит извлечь все ссылки (в данном случае /127.0.0.1, /%D0%9D%D1%83%D0%B1) и записать в массив.
PHP: <?php $txt = '<li><a href="/127.0.0.1" title="127.0.0.1">127.0.0.1</a></li> <li><a href="/%D0%9D%D1%83%D0%B1" title="Нуб">Нуб</a></li></ul>'; if(preg_match_all('#<a[^>]*? href="(.*?)"#',$txt,$m)) print_r($m[1]); ?>
подскажите пожалуйста регулярку, для обработки телефонов... нужно оставить только числа, убрав знаки. формат разный: Code: 123-45-67 123-4567 8(123)4567890 8(123) 456-78-90 8-123-456-78-90 8 123 456 78 90 и еще куча всего, в том числе попадаються с опечатками. нужно оставить только цифры, т.е. привести к виду 1234567.
@OdaN PHP: <?php echo preg_replace('#[^\d\r\n]#','',"123-45-67 123-4567 8(123)4567890 8(123) 456-78-90 8-123-456-78-90 8 123 456 78 90"); @InfectedM жадность надо ставить меньше - U.
Еще вопрос: есть строка Code: Иванов Иван Иваныч Нужно на выходе сделать Иванов И. И., но задница в том, что строка в юникоде. От модификатора "u" толку никакого =(
OdaN iconv или ближайший аналог на вашем яп Покажите код, как вариант, если строка только русская - можно считать ее бинарной строкой и сохранять первые два символа после пробела. PHP: $str = 'Иванов Иван Иваныч'; echo preg_replace('~^([^ ]+) (.{2})[^ ]* (.{2})[^ ]*$~', '\1 \2. \3.', $str); С модификатором u - тоже работает: PHP: $str = 'Иванов Иван Иваныч'; echo preg_replace('~^([^ ]+) (.)[^ ]* (.)[^ ]*$~u', '\1 \2. \3.', $str); Все файлы сохранять в UTF-8 без BOM
Да, действительно все работает. Спасибо большое =) Судя по всему проблема не в кодировке была, а в кривых руках...
Здравствуйте, есть регулярка: Code: if (preg_match("#(\A(19[7-9][0-9]|20\d\d)([- /.])([1-9]|0[1-9]|1[012])([- /.])(0[1-9]|[12][0-9]|3[01])\z)|(\A(19[7-9][0-9]|20\d\d)([- /.])([1-9]|0[1-9]|1[012])\z)|(\A(19[7-9][0-9]|20\d\d)\z)#", $date)) echo "OK"; Проверяет является ли строка датой в формате: YYYY-MM-DD или YYYY-MM или YYYY Где: YYYY - год, от 1970 до 2099 MM - месяц, от 1 или 01 до 12 DD - день, от 01 до 31 Можно ли составить аналогичное регулярное выражение только, что бы оно было короче?
Как спарсить значение из ошибки mysql Duplicate entry 'значение1' for key 1? Значение может являться любыми регистро-независимыми символами русского и английского алфавита, включая подчеркивания, пробелы и любые спецсимволы.
Подскажите как разделить на php. В общем в переменную приходит число к примеру = 15654321. Надо чтобы это число разбить на 1565 на 43 и 21. То есть с конца по 2 раза по 2 цифры а остальное число целое. Но бывает что приходит просто 2 надо чтобы оно осталось без изменений. Надеюсь понятно объяснила.
PHP: $s = 'owaei jfoaiwejfoawij 234214123449865 ewafeaw wea814465416'; echo preg_replace('~((?<=\d))(\d{2})(\d{2})(?=\b)~', '$1 $2 $3', $s);
PHP: <?php $int = 15654321; $part1 = substr($int,-2); $part2 = substr($int,-4,2); $part3 = substr($int,0,-4); echo $part1.'<br>'; echo $part2.'<br>'; echo $part3.'<br>'; ?> GalaX, не все так сложно, чтоб к регуляркам прибегать =)
Подскажите в общем приходи текст в виде PHP: <root error="0"> <mail id="6097675" type="2" ctime="1284843388" attach="1" read="0"> <from uid="52979"> <![CDATA[root]]> </from> <subject> <![CDATA[спасибо]]> </subject> </mail> <mail id="6097690" type="2" ctime="1284843422" attach="1" read="0"> <from uid="52979"> <![CDATA[toor]]> </from> <subject> <![CDATA[спасибо]]> </subject> </mail> </root> Надо выпарсить данные между 1) mail id=" и " type= 2) <![CDATA[ и ]> Не там где спасибо а там где root и toor Пытаюсь на первый сделать вот таким кодом PHP: $pattern = "#mail id=\"/(.+)\"/ type)#"; $change_check = preg_match($pattern ,$content2,$data4); print_r($data4); Но он мне выводит Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 21 in Z:\home\localhost\www\ounder\index.php on line 31
PHP: preg_match('#mail id="([0-9]+)" type="(.*?)"#', $file, $a); print_r($a); preg_match_all('#CDATA\[(.*?)\]\]\>#', $file, $bb); print_r($bb);
Так не подходит потому что получаем PHP: <root error="0"> <mail id="6097690" type="2" ctime="1284843422" attach="0" read="1"> <from uid="52979"> <![CDATA[ Собчинский ]]> </from> <subject> <![CDATA[ спасибо ]]> </subject> </mail> <mail id="6098165" type="2" ctime="1284846155" attach="1" read="1"> <from uid="720848"> <![CDATA[ Бог_Смерти ]]> </from> <subject> <![CDATA[ ]]> </subject> </mail> <mail id="6098167" type="2" ctime="1284846156" attach="1" read="0"> <from uid="901847"> <![CDATA[ ifris ]]> </from> <subject> <![CDATA[ ]]> </subject> </mail> <mail id="6098166" type="2" ctime="1284846156" attach="1" read="0"> <from uid="832639"> <![CDATA[ 0111 ]]> </from> <subject> <![CDATA[ ]]> </subject> </mail> </root> А он мне выводит Array ( [0] => mail id="6097690" type="2" [1] => 6097690 [2] => 2 ) Array ( [0] => Array ( [0] => CDATA[Собчинский]]> [1] => CDATA[спасибо]]> [2] => CDATA[Бог_Смерти]]> [3] => CDATA[]]> [4] => CDATA[ifris]]> [5] => CDATA[]]> [6] => CDATA[0111]]> [7] => CDATA[]]> ) [1] => Array ( [0] => Собчинский [1] => спасибо [2] => Бог_Смерти [3] => [4] => ifris [5] => [6] => 0111 [7] => ) )
PHP: <?php $txt = '<root error="0"> <mail id="6097675" type="2" ctime="1284843388" attach="1" read="0"> <from uid="52979"> <![CDATA[root]]> </from> <subject> <![CDATA[спасибо]]> </subject> </mail> <mail id="6097690" type="2" ctime="1284843422" attach="1" read="0"> <from uid="52979"> <![CDATA[toor]]> </from> <subject> <![CDATA[спасибо]]> </subject> </mail> </root> '; if(preg_match_all('#mail id="(\d+)".*\[CDATA\[(.*)\]\]#Uis', $txt, $m)) { print_r($m); } ?> Результат: Думаю всё понятно?