|
|
|
| Подскажите, плз, регулярку, выбирающую все адреса по шаблону:
<a href='(adress)>, <a href="(adress)">, <img src=... alt='(adress)'>, <img src=... alt="(adress)"> | |
|
|
|
|
|
|
|
для: cia
(18.08.2006 в 08:40)
| |
<?
$str = "<a href='(adress)>";
$str2 = "<a href=\"(adress)\">";
preg_match("|<a href=\'\(([\s\S]+)\)>|isU",$str,$out);
preg_match("|<a href=\"\(([\s\S]+)\)\">|isU",$str2,$out2);
$res = $out[1];
$res2 = $out2[1];
echo "$res $res2";
?>
|
etc | |
|
|
|
|
|
|
|
для: eclipse
(18.08.2006 в 08:53)
| | Я могу следующее предложить:
eregi_replace('(.*)\\[url=(http://){1}(.*)\\](.*)\\[/url](.*)' , '\\1<a href="\\2\\3" target="_blank">\\4</a>\\5', $msg);
eregi_replace('(.*)\\[url=([^http://].*)\\](.*)\\[/url](.*)' , '\\1<a href="http://\\2" target="_blank">\\3</a>\\4', $msg);
|
Я решил просто с обработкой сообщений и тэгов: Я сделал базовый класс в котором происходит замена тэгов и стандартные действия с сообщением. И сделал класс который наследует базовый. В порожденном классе я обьявил массив с поддерживаемыми тэгами:
Ключ элемента - это поддерживаемый тэг, а его значение - замена:
//Массив в порожденном классе. Если в начале ключа идет слово "eregi", то это рег. выражение. Это слово просто при обработке отбрасывается.
$this->tags = array( 'eregi(.*)\\[url=(http://){1}(.*)\\](.*)\\[/url](.*)' => '\\1<a href="\\2\\3" target="_blank">\\4</a>\\5',
'eregi(.*)\\[url=([^http://].*)\\](.*)\\[/url](.*)' => '\\1<a href="http://\\2" target="_blank">\\3</a>\\4',
'' => '<b>', '' => '</b>' );
//Базовый класс.
foreach($this->tags as $FrmTag => $ToTag)
{
if(substr($FrmTag, 0, 5) == "eregi") $this->TxtHandler = eregi_replace( substr( $FrmTag, 5), $ToTag, $this->TxtHandler);
else $this->TxtHandler = str_ireplace( $FrmTag, $ToTag, $this->TxtHandler);
}
|
P. S. Мне надо с помощю регулярных выражений узнавать: в строке только цыфры или есть еще и буквы? Помогите пожалуйста. Я просто пишу программу для отправки сообщений другим пользователям сайта, и я хочу чтобы при отправке сообщений можно было вводить не только имя получателя, но и его ID. | |
|
|
|
|
|
|
|
для: Геогрий
(18.08.2006 в 16:58)
| | Я нашел регулярное выражение выясняющее "в строке одни цыфры или есть еще буквы" в книге "PHP 5 на примерах": "|^[/d]*$|@", правда там оно было на диалекте Perl, но я перевел на диалект POSIX : "(^[0-9]+$)". | |
|
|
|
|
|
|
|
для: Геогрий
(18.08.2006 в 18:00)
| | а зачем? POSIX неумолимо устаревает | |
|
|
|
|
|
|
|
для: BAHO
(20.08.2006 в 14:51)
| | Ммм... скажем более мягко, POSX-регулярные выражения будут исключены из PHP, сам стандарт POSIX от этого никуда не девается и устаревает. | |
|
|
|
|
|
|
|
для: cheops
(20.08.2006 в 18:35)
| | аха! а зачем же их тогда удаляют из ядра PHP? оставили бы? я конечно понимаю, что, как вы сказали, диалекты красоты языку не придают, но всё же, кому то удобнее использовать одни реги, другим - другие...
тем более потерять POSIX-регам такого сильного сторонника как PHP - смерти подобно | |
|
|
|
|
|
|
|
для: BAHO
(20.08.2006 в 23:01)
| | POSIX - это не регулярные выражения, это стандарт переносимых операционных систем, к удовлетворению которого стремится не только любая UNIX-система, но и Windows. Потерять для POSIX PHP - это плюнуть и растереть. Из PHP POSIX-регулярные выражения, которые являются малой толикой стандарта, исключаются по той причине, что из PHP разработчики делают ортогональный язык и все дублирующие библиотеки стараются исключить. Perl-библиотеку исключить нельзя, поэтому исключают POSIX, однако это не значит, что больше в жизни вы с этими регулярными выражениями не столкнётесь - это стандарт для утилит, POSIX-выражения используются в MySQL. Perl-выражения используются как правило в языках программирования - этот диалект заточен под использование в языках программирования. POSIX - заточены под использование в операционных системах. | |
|
|
|
|
|
|
|
для: cia
(18.08.2006 в 08:40)
| | А если много ссылок, куда все кидается | |
|
|
|