|
|
|
| есть переменная $perem
есть решулярное выражение которое проверяет следующее
ссылка site.ru/1=ddg&2=$perem&3=343&4=3fged
но дело в том что переменная $perem может содержаться как и под цифрой 1 так и под цифрой 2 так 3 так и 4... но она находится определённо ТОЛЬКО в одной из них...в других содержаться какие-то произвольные данные... как под это написать регулярное выражение? | |
|
|
|
|
|
|
|
для: tricket
(30.05.2007 в 21:19)
| |
<?
$perem = "blah";
$url = "site.ru/1=ddg&2=$perem&3=343&4=3fged";
list($site, $query) = explode("/", $url);
parse_str($query, $arr);
foreach( $arr as $key => $val ) {
if ( $val == $perem ) {
print '$perem найдено в индексе '.$key;
}
}
|
| |
|
|
|
|
|
|
|
для: Саня
(30.05.2007 в 23:23)
| | Низачот! :))
Во-первых, просили рег. выражение (я бы сам на него с удовольствием взглянул), во-вторых, вообще какой-то частный случай (будет >1 слешей, работать не будет), в-третьих, вообще не это просили... Как я понял нужно проверить, что $perem содержится только в одном индексе. Хотя, могу, конечно, ошибаться (хотел бы взглянуть именно на рег. выражение) | |
|
|
|
|
|
|
|
для: kasmanaft
(31.05.2007 в 09:17)
| | Саня конечно спасибо за энтузиазм, но не то.
kasmanaft да ты всё правильно понял! | |
|
|
|
|
|
|
|
для: tricket
(31.05.2007 в 11:23)
| | Вам обязательно нужно рег. выражение?
(а то из-за меня так и не дождетесь... составить его непросто)
Если нет, то немного изменив код Сани, получите то, что нужно. (в этом же цикле просто посчитайте количество повторений этого самого $perem и все)
А на рег. выражение я бы всё же взглянул :D | |
|
|
|
|
|
|
|
для: kasmanaft
(31.05.2007 в 11:43)
| | составить его непросто
я понимаю) а можешь хотя бы толчок дать, есть ли оператор "или" в регулярном выражении?
в принципе у мну есть решения моей задачи сделанные не через регулярку) но охото использовать всё же её) спортивный интерес так сказать :-D | |
|
|
|
|
|
|
|
для: kasmanaft
(31.05.2007 в 09:17)
| | Ну если так хочется регвырами:
<?
$perem = "blah";
$url = "site.ru/1=ddg&2=$perem&3=343&4=3fged";
preg_match_all("/\d=$perem/", $url, $m);
if ( count($m[0]) > 1 ) print '$perem встречается больше одного раза';
|
> (будет >1 слешей, работать не будет)
Поставить '2' в третий параметр функции explode() и пусть будет хоть миллион слешей... | |
|
|
|
|
|
|
|
для: Саня
(31.05.2007 в 12:56)
| | Мне не этого хотелось. Мне хотелось посмотреть на регулярное выражение, с помощью которого (его одного) можно было бы решить поставленную задачу. То есть if ( preg_match ( ) ) echo 'yes/no'.
И я составил его. Скажу честно, было не просто.
Использовать его в бою, конечно, не нужно... Просто спортивный интерес.
<?php
$perem = "test";
$url = "?1=aaa&2=bbb&3=ccc&4=$perem";
$url = "?1=aaa&2=bbb&3=ccc&4=ddd";
$url = "?1=$perem&2=aaa&3=ccc&4=$perem";
$url = "?1=aaa&2=test&3=testt&4=testttt";
if (preg_match("#^\?\w+\=($perem)?+(?(1)|[^&]*)&\w+\=(?(1)(?!$perem&)[^&]*|(($perem)|(?!$perem&)[^&]*))&\w+\=(?(1)(?!$perem&)[^&]*|(?(3)(?!$perem&)[^&]*|(($perem)|(?!$perem&)[^&]*)))&\w+\=(?(1)(?!$perem$)[^&]*|(?(3)(?!$perem$)[^&]*|(?(5)(?!$perem$)[^&]*|$perem)))$#", $url))
echo 'Всё верно';
else echo 'Что-то не так';
?>
|
Без пол-литра правда тут не разберешьсся.. | |
|
|
|
|
|
|
|
для: kasmanaft
(01.06.2007 в 00:34)
| | вау! а я не пью сейчас :) распечатаю твою регулярку и на досуге разберу!
спасиб! очень интересная регулярка!!!! | |
|
|
|
|
|
|
|
для: kasmanaft
(31.05.2007 в 09:17)
| | >Низачот! :))
низачот аффтару вопроса.
Нету в регулярных выражениях никаких переменных (кроме результатов сопоставления)
Все переменные уровня php подставляются в шаблон еще до передачи движку.
Соответственно, рассыпается формулировка задачи. | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2007 в 12:58)
| | ты прав) чтот моя задача похоже на чудеса для регулярок)
наверное сделаю так:
<?
$perem = "test";
$url = "site.ru/?1=ddg&2=$perem&3=343&4=3fged";
$good=preg_match_all("site\.ru/\?1=([a-zA-Z]{1,1000})&2=([a-zA-Z]{1,1000})&3=([a-zA-Z]{1,1000})&4=([a-zA-Z]{1,1000})", $url, $res);
$n='0';
if($good=="1")
{
#цикл лень писать :-D
if($res[1][0]==$perem){++$n;}
if($res[2][0]==$perem){++$n;}
if($res[3][0]==$perem){++$n;}
if($res[4][0]==$perem){++$n;}
}
if($n=='1' and $good='1'){echo "ссылка гуд!";}
?>
|
жаль но одними регулярками не обойтись(
P.S. код чисто на коленке для наглядности написал, поэтому там навено милион ошибок) | |
|
|
|