|
|
|
| Его значение: "Любое из разделяемых выражений, например, выражение first|second соответствует любой строке, содержащей либо слово first, либо слово second."
Так вот, зачем же в регулярных выражениях всегда в начале и в конце ставить "|"?
Объясните пожалуйста!
И вот пример- "|[a-z_][^0-9]|i"
Возможны буквы от a до z не смотря на регистр и доступен символ подчеркивания _. Не доступны
цифры!
Но, так как после [a-z_] нет "+" плюса можно вводить только один символ, но это почему-то не работает. Сколько хочешь столько и пиши. При том что стоит запрет "^" на числа, их все равно можно употреблять с буквами...
Вот посмотрите, именно это рв "|[a-z_][^0-9]|i" не работает вообще не как.
Пробывал без запрета на цифры "|[a-z_]|i". Тут вроде нет от 0-9 а их все равно употреблять можно.
Надо чтобы соответствовало - Разрешены английские буквы и символ подчеркивания! | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 15:12)
| | А в какой оболочке вы использовали этот паттерн?(можете показать кусок кода окружающего это выражение? | |
|
|
|
|
|
|
|
для: tvv123456
(21.07.2010 в 15:28)
| |
<?php
echo '
<form method=get>
Разрешены английские буквы и символ подчеркивания!<br>
<input type=text size=15 name=name value='.$_GET['name'].'>
<br><input type=submit><br>';
if(preg_match("|[a-z_][^0-9]|i",$_GET['name'])) echo 'Ник введен верно! ',$_GET['name'];
else echo 'Ник введен не корректно!';
?>
|
| |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 15:31)
| |
<?php
echo '
<form method=get>
Разрешены английские буквы и символ подчеркивания!<br>
<input type=text size=15 name=name value='.$_GET['name'].'>
<br><input type=submit><br>';
if(preg_match("|^[a-z_]$|i",$_GET['name'])) echo 'Ник введен верно! '.$_GET['name'];
else echo 'Ник введен не корректно!'.$_GET['name'];
?>
|
Все работает как должно(то есть пропускаеться только 1 буква или подчеркивание).
А НЕ ЦИФРА пишеться так: [\d] | |
|
|
|
|
|
|
|
для: tvv123456
(21.07.2010 в 16:01)
| | Спасибо. но в начале у меня был вопрос, зачем "|" в начале и конце?
Обязательно в начале ставить "^" а в конце "$" | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 16:40)
| | Ну не заморачиваясь | - начало и конец выражения(кстати это не единственный символ, можно также использовать / и др.)
^$-обозначают начало и конец строки(или что-то в этом роде) | |
|
|
|
|
|
|
|
для: tvv123456
(21.07.2010 в 17:57)
| | Спасибо. Буду знать! | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 16:40)
| | >зачем "|" в начале и конце
Для обертки всего выражения, чтобы показать границы, можно вместо них поставить "/", "#" ... | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 15:12)
| | Что бы не создавать новой темы... и опять решил уточнить!
Вот к примеру, проверка e-mail на корректность...
"|^[-0-9a-z_]+@[-0-9-a-z^\.]+\.[a-z]{2,6}$|i"
|
Зачем нужен спецсимвол ^ в проверке доменного имени?
Ведь как известно ^ - это позиция в начале строки....
Или ^ говорит что точки в доменном имени присутствовать не должно?! | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 00:25)
| | Почитайте-ка вы про рег.выражения.. Кстати говоря, по-моему, тут закралась ошибка.
Если бы ^ стоял в начале класса [^some]- это бы означало, что все остальные символы, описанные в классе, запрещены. Но т.к. ^ стоит дальше [some^]- ^ просто является одним из разрешенных символов. | |
|
|
|
|
|
|
|
для: neadekvat
(24.07.2010 в 00:36)
| | Дык я читаю.... но это не может просто быть! хоть раз видели url с ^? Я нет! Пример взят из книги PHP5/6 третье издание | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 00:48)
| | А запустить пару тестов что вам мешает? | |
|
|
|
|
|
|
|
для: neadekvat
(24.07.2010 в 01:03)
| | В смысле? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 01:07)
| | Вот вы взяли пример откудато, и вам там сказали, что он делает то-то.
А проверить самому, делает ли он то, что заявлено - что мешает? Невозможно же вечно капаться в теории - она без практики мертва. | |
|
|
|
|
|
|
|
для: neadekvat
(24.07.2010 в 11:30)
| | А... вон вы о чем... | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 15:12)
| | Опять рег. выражения поставили меня в небольшой тупик. К сказал один мудрый человек в этой теме "тестируй, ибо теория без практики не что!" Так вот... Начал тестировать... Курс валют сграбить решил!
Вот сам код
<?php
$contents = file_get_contents("http://bankir.ru/kurs");
$preg_d = "|Курс доллара США</a></h1></td><td width=\"100\"><b>(.*?)</b></td>|i";
$preg_e = "|Курс Евро</a></h1></td><td width=\"100\"><b>(.*?)</b></td>|i";
if(preg_match($preg_d,$contents,$dollar) && preg_match($preg_e,$contents,$evro))
{
$kurs[] = 'Курс доллара США: '.$dollar['1'];
$kurs[] = 'Курс евро: '.$evro['1'];
}
if(isset($kurs))
{
foreach($kurs as $kur)
{
echo "$kur<br>";
}
}
?>
|
Если что, где не правильно, вы строку подскажите, я сам постараюсь найти. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 19:55)
| | Вас губят (не только в этом примере, и не только Вас - тут подобных случаев вообще большинство) вот такие фрагменты шаблона
Точка означает "любой символ".
Вопрос означает "хватай по-одному"
В то время как символы обычно вовсе даже не любые, а вполне себе определенные.
И хватать в этом случае стоит как раз побольше, чтобы быстрее работало. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2010 в 21:10)
| | Ну вот к примеру...
<?php
$contents = file_get_contents("http://bankir.ru/kurs");
$preg_d = "|Курс доллара США</a></h1></td><td width=\"100\"><b>[\d]*\.[\d]*</b></td>|isU";
//$preg_e = "|Курс Евро</a></h1></td><td width=\"100\"><b>(\d)*</b></td>|isU";
if(preg_match($preg_d,$contents,$dollar))
{
echo 'go';
}
?>
|
тоже не работает. Хотя я тут определенно дал знать, что результатом может быть несколько
цифр, потом обязательно точка, после которой опять может быть несколько цифр. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 23:20)
| | Я там вижу совершенно иной фрагмент
<tr class="odd">
<td><h1><a href="http://bankir.ru/kurs/abs/840">Курс доллара США</a></h1></td>
<td width="100"><b>30.3839</b></td>
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.07.2010 в 23:35)
| | >Я там вижу совершенно иной фрагмент
>
<tr class="odd">
> <td><h1><a href="http://bankir.ru/kurs/abs/840">Курс доллара США</a></h1></td>
> <td width="100"><b>30.3839</b></td>
>
|
Ну я просто не взял
<tr class="odd">
<td><h1><a href="http://bankir.ru/kurs/abs/840">
|
| |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 23:45)
| | а по-моему Вы просто не взяли еще и некоторые пробльные символы, что в конечном итоге и породило фэйл. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 23:45)
| | Говоря что теория без практики мертва я имел в виду, что теорию надо проверять на практике, а не то, что надо практиковаться без теории.
Перенос строки относится к пробельным символам. Но там вообще есть еще некоторые нюансы типа того, входил ли перенос в "точку" и при каких модификаторах и т.д. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2010 в 21:10)
| | И кстати, можно ли вообще в моем примере, тот который по ближе, использовать квадратные скобки? Вот блин.... почему все это я спрашиваю на форуме, почему все это нельзя было написать в книге. Только понятия дают и все! А там разбирайся сам как хочешь!!! Книга PHP5/6 Третье издание | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(24.07.2010 в 23:25)
| | В этом форуме не раз прозвучало, что для понимания Рег. выражений читайте Фридла | |
|
|
|
|
|
|
|
для: neadekvat
(25.07.2010 в 14:53)
| | А какие регулярные выражения используются в этой книге? Perl или POSIX? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(26.07.2010 в 12:17)
| | К чему этот вопрос? Лучше книги по рег.выражениям вы не найдете. Качайте и читайте. Носом еще воротить будут, совсем уже.. | |
|
|
|
|
|
|
|
для: neadekvat
(26.07.2010 в 12:54)
| | В смысле я читаю... просто в самом начале когда еще самое вступление читал... я вспомнил... что в PHP6 из ядра POSIX будет исключен с корнями... а книга не новая. Но я щас дошел до примеров, до более подробных и убедился что там имеется ввиду Perl'овские регулярные выражения | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(26.07.2010 в 13:08)
| | Ох, да бросьте, это все просто иные синтаксисы, диалекты и т.д. - разобрашись в основах, научившись "думать" регулярными выражениями (как говорит автор книги), все остальное будет не проблемой. | |
|
|
|
|
|
|
|
для: neadekvat
(26.07.2010 в 14:20)
| | Да... помню. А в php метасимволы \< и \> доступны? Их можно использовать? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(26.07.2010 в 16:37)
| | Опять вы спрашиваете то, что можно проверить парой тестов. | |
|
|
|
|
|
|
|
для: neadekvat
(26.07.2010 в 18:37)
| | Да... опять облажался... Вот мне как раз понадобились эти метасимволы. В предложение надо найти к примеру слово "Я". Имеется предложение "Привет, Я юзаю яндекс." Мне надо проверить есть ли в предложение то самое слово "я" в тексте. Вот были бы в php \< и \> то без проблем, но их нет! Что делать если использовать preg_match? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(26.07.2010 в 18:47)
| | Вы хотите показать конец слова или что? | |
|
|
|
|
|
|
|
для: neadekvat
(26.07.2010 в 21:23)
| | Нет. Мне надо проверить есть это слово или нет!
Можно было бы воспользоваться "|[\<я\>]|i"
То есть искать слово. Но в php нет \< и \> так что... Чем воспользоваться? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(27.07.2010 в 00:08)
| | \b указывает на конец слова. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(21.07.2010 в 15:12)
| | Добавьтесь пожалуйста ко мне пожалуйста в ICQ. А то на сайте с общением не очень быстро...
ICQ 62996218 | |
|
|
|