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
Форумы портала PHP.SU :: Версия для печати :: Удаление лишних символов
Форумы портала PHP.SU » PHP » Регулярные выражения » Удаление лишних символов

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

1. Саныч - 23 Августа, 2010 - 16:34:56 - перейти к сообщению
Есть такой js код
CODE (javascript):
скопировать код в буфер обмена
  1. value = value.replace(/\s*([\.\!]){3,}\s*/g,"$1$1$1 ");
  2. value = value.replace(/\s*([\.\!]){2}\s*/g,"$1$1 ");

если в строке введено "слово1 ....... слово2", делаем так "слово1... слово2", если же "слово1..слово2", то "слово1. слово2"
Короче говоря, если введено более 3 символов, то режем до трех, если 2, то оставляем только один. С тремя и более все нормально, а вот когда добавляю проверку на 2 символа получаю что-то типа этого: "слово!! ! слово"
Как правильно составить регулярку для моей цели?

Да и еще, возможно ли с помощью регулярок менять регистр букв? Пример, есть строка "слово раз. слово два", нужно заменить на "слово раз. Слово два"
2. Uchkuma - 23 Августа, 2010 - 18:05:19 - перейти к сообщению
Саныч пишет:
Как правильно составить регулярку для моей цели?
Вот так, я думаю, будет правильно:
Цитата:
(?<![.!])([.!]){2}(?![.!])
и в качестве замены выставить ссылку $1 и все!
(Добавление)
Саныч пишет:
Да и еще, возможно ли с помощью регулярок менять регистр букв?
На javascript не знаю, а на php разве что preg_replace_callback().
3. Саныч - 23 Августа, 2010 - 18:22:42 - перейти к сообщению
Uchkuma пишет:
Вот так, я думаю, будет правильно

Все таки неправильно. Вот этот кусок "(?<![.!])" вызывает ошибку, я так понимаю из-за символа "<". Вот эта часть "(?![.!])" тоже не помогает, я пробовал так прописывать еще до того, как задал вопрос...
4. Uchkuma - 23 Августа, 2010 - 19:35:35 - перейти к сообщению
Саныч пишет:
Вот этот кусок "(?<![.!])" вызывает ошибку, я так понимаю из-за символа "<".
Хм... Видимо, в javascript нету просмотра назад?
Саныч пишет:
Вот эта часть "(?![.!])" тоже не помогает
Эта часть должна работать. Смотреть тут.
5. Саныч - 23 Августа, 2010 - 19:47:53 - перейти к сообщению
Uchkuma пишет:
Эта часть должна работать. Смотреть тут.

Ну эта ссылка для меня не нова Улыбка
То что часть должна работать это я понимаю, поэтому и пробовал ее раньше подставлять. Ведь по логике все правильно, если после двух точек нет еще одной, то заменяем... Вроде бы все правильно, но... не работает Хм
6. Uchkuma - 23 Августа, 2010 - 19:52:51 - перейти к сообщению
Ну раз нету просмотра назад, можно так попробовать:
Цитата:
([^.!])([.!]){2}(?![.!])
Тогда замена должна быть на $1$2.
7. Саныч - 23 Августа, 2010 - 20:00:49 - перейти к сообщению
Нет этот тоже не то. При такой регулярке строку "слово!!!" режет до "слово!!"...
Ну я впринципе придумал как это можно реализовать, завтра на свежую голову попробую...
8. Uchkuma - 23 Августа, 2010 - 20:14:15 - перейти к сообщению
Саныч пишет:
При такой регулярке строку "слово!!!" режет до "слово!!"
Да быть такого не может. Или я ничего не понимаю в регулярках.

Может точки экранировать? Хотя внутри символьного класса этого делать не обязательно. Хотя это же javascript, может еще какие заморочки есть в отличие от php.
9. Саныч - 23 Августа, 2010 - 20:19:23 - перейти к сообщению
Uchkuma пишет:
Может точки экранировать?

когда проверял у себя, заекранировал, результат описал выше...
я вобще символы всегда экранирую, чтобы наверняка, привык так уже...
10. JustUserR - 24 Августа, 2010 - 14:48:37 - перейти к сообщению
Саныч пишет:
Да и еще, возможно ли с помощью регулярок менять регистр букв?
В JS-скриптах все строковые объекты имеются значительное число методов для реализации различной функциональности - в частности для изменения регистра можно использовать toLowerCase и toUpperCase
Uchkuma пишет:
Это же javascript, может еще какие заморочки есть в отличие от php.
В JS-скрипах работа с регулярными выражениями PCRE является наиболее удобной поскольку максимально приближена к синтаксису из языка Perl который по сути является автором этого стандарта - преимущество заключается в том что регулярнгые выражения образуют не только отдельный базовый класс и но представляют собой спецальный тип константыных выражений - соответственно дополнительный уровень связанный со строковым экранированием в нем не требуеся Кроме того поиск и замена всех шаблонов определяется аналогичной функией - но с использованием исходного модификатора /g

 

Powered by ExBB FM 1.0 RC1