Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Знак ~ в регулярном выражении

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
zypikov
Отправлено: 21 Сентября, 2011 - 10:17:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




"~[^a-zA-Z0-9_\.-]~"
Что дает знак тильда в этой регулярке?)


-----
У всего есть обратная сторона.
 
 Top
EuGen Администратор
Отправлено: 21 Сентября, 2011 - 10:19:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ничего не делает, это просто разграничитель для PHP - с таким же успехом можно записать
#[^a-zA-Z0-9_\.-]#
или например
@[^a-zA-Z0-9_\.-]@


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 21 Сентября, 2011 - 10:27:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




следует заметить что разграничитель хоть и может быть любым символом(почти)
но следует его экранировать если он встречается внутри регулярки
(Добавление)
классически применяется разграничитель"/"
но часто его заменяют на другой чтобы не экранировать слэши внутри регулярки
 
 Top
Росич
Отправлено: 21 Сентября, 2011 - 11:28:10
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Именно поэтому исторически Я практически всегда использую #...# - так как он внутри встречается почти никогда Улыбка .
 
 Top
zypikov
Отправлено: 21 Сентября, 2011 - 14:48:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




спасибо! А то вроде всю документации по регуляркам посмотрел, думаю что за символ такой)
Помогите исчо

bxc2xbeac c2xb wavol c2xb dddeoq - в этой строке нужно найти все c2xb окруженные пробелами, перед которыми точно не идут одной и больше d, и заменить их скажем на "~~~~".

"/(\s)(c2xb)(\s)([^d+])/" - моя регулярка, только "съедает" первую w в первой замене:
bxc2xbeac~~~~avol c2xb dddeoq


-----
У всего есть обратная сторона.
 
 Top
LIME
Отправлено: 21 Сентября, 2011 - 14:51:58
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




zypikov пользуюсь своей загадочной способностью к предвидению и предположу что вы применяет preg_match
посмотрите http://php.su/functions/?preg_match_all
(Добавление)
впредь давайте код или сами думайте
уважайте помошников тем более мы это делаем безвозмездно
 
 Top
zypikov
Отправлено: 21 Сентября, 2011 - 17:13:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1. $text = "bxc2xbeac c2xb wavol c2xb dddeoq";
  2. print preg_replace("/(\s)(c2xb)(\s)([^d+])/i","~~~~",$text);


-----
У всего есть обратная сторона.
 
 Top
LIME
Отправлено: 21 Сентября, 2011 - 17:22:25
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




попробуйте
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = "bxc2xbeac c2xb wavol c2xb dddeoq";
  3. echo preg_replace("/[^d]\s+c2xb\s/i","~~~~",$text);
  4. ?>

если в утф то добавьте модификатор u
(Добавление)
исправил

(Отредактировано автором: 27 Сентября, 2011 - 11:05:13)

 
 Top
zypikov
Отправлено: 22 Сентября, 2011 - 01:56:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




у меня после выполнения этого скрипта результат такой:
bxc2xbea~~~~wavo~~~~dddeoq
"Съедает" букву перед пробелом Огорчение

LIME а почему без \s без круглых скобок?

Цитата:
тем более мы это делаем безвозмездно

За это вам большой респект!

(Отредактировано автором: 22 Сентября, 2011 - 01:58:02)



-----
У всего есть обратная сторона.
 
 Top
f111
Отправлено: 22 Сентября, 2011 - 11:11:40
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




zypikov пишет:
перед которыми точно не идут одной и больше d
хз о чём речь. в представленной вами строке никакой d не заметил.

Если этот момент не учитывать, то:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = "bxc2xbeac c2xb wavol c2xb dddeoq";
  3. echo preg_replace("/\b(c2xb)\b/i","~~~~",$text);
  4. ?>
 
 Top
LIME
Отправлено: 22 Сентября, 2011 - 11:33:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




f111 да
только уберите карман к чему он
а если всеже учитывать тогда усложняется
PHP:
скопировать код в буфер обмена
  1. echo preg_replace("/(?<!d)(?<\s+)c2xb(?=\s+)/i","~~~~",$text);
zypikov пишет:
LIME а почему без \s без круглых скобок?
а зачем в регярках круглые скобки?
тут не надо короче

(Отредактировано автором: 22 Сентября, 2011 - 14:04:47)

 
 Top
LIME
Отправлено: 22 Сентября, 2011 - 14:01:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




f111 по условиям границы замены есть пробелы
а границой слова могуть любые символы кроме букв и цифр
(Добавление)
после исправления на "негативный просмотр назад"выдает ошибку
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = "bxc2xbeac c2xb wavol c2xb dddeoq";
  3. echo preg_replace("/(?<!d)(?<=\s+)c2xb(?=\s+)/i","~~~~",$text);
  4. ?>
что не так?
(Добавление)
Цитата:

Warning: preg_replace() [function.preg-replace]: Compilation failed: lookbehind assertion is not fixed length at offset 13 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\index.php on line 3

(Добавление)
ЧОРД
разобрался
а как сделать позитив назад с неизвестной длинной?
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = "bxc2xbeac c2xb wavol c2xb dddeoq";
  3. echo preg_replace("/(?<!d)(?<=\s)c2xb(?=\s+)/i","~~~~",$text);
  4. ?>
это работает
без + в позитивном просмотре назад
тоесть только 1 пробел смотрит
неизвестную длину нельзя
(Добавление)
и с строкой "bxc2xbeac c2xb wavol c2xb dddeoq xc2xbeacdd c2xb wavold c2xb dddeoq"
вообще не работает
меняет как миленький все
помогите разобраться
спс
(Добавление)
сделал иначе
все работает
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = "bxc2xbeac c2xb wavol c2xb dddeoq   xc2xbeacdd c2xb wavold c2xb dddeoq";
  3. echo preg_replace("/(?<!d)(\s+)c2xb(\s+)/i","$1~~~~$2",$text);
  4. ?>
zypikov с вас + в карму Подмигивание

(Отредактировано автором: 22 Сентября, 2011 - 14:23:03)

 
 Top
f111
Отправлено: 22 Сентября, 2011 - 17:42:17
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




LIME пишет:
только уберите карман к чему он
перечитывая в туалете домашнее чтиво (Джеффри Фридл - регулярные выражения) Радость так и не напоролся на слово карман. Видимо используется в более серьёзных изданиях.

поэтому не могли бы вы пояснить смысл этого слова в данном контексте?
 
 Top
LIME
Отправлено: 22 Сентября, 2011 - 19:38:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




f111 в последней редакции регулярки
первый карман ($1) это (\s+)
он же и второй $2
но это совпадение в данном конкретном случае
Котеров "PHP5 в подлиннике" стр 416
 
 Top
f111
Отправлено: 22 Сентября, 2011 - 21:48:05
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




LIME Не понял , в моём РВ нет ни ($1) , ни (\s+), ни $2
(Добавление)
если вы про подшаблон в моём РВ, то почему бы ему и не быть, это не preg_match_all, так что совсем и не мешает
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB