Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > проблемма с составлением Pattern


Автор: jone31 9.2.2012, 21:31
подскажите, в скрипте есть строка которую нужно проверить на наличие некой подстроки, и если она есть то удалить всю строку...
делал это так:

Код

Pattern p = Pattern.compile("искомая подстрока");
Matcher m = p.matcher(str);
if( m.matches() ) str = "";


не работает...  пише это:
Цитата

Typed variable declaration : Class: Pattern not found in namespace


подскажите как правильно построить шаблон для него?

Автор: mstalker26 9.2.2012, 23:28
Подойдет? Хотя не ручаюсь, пишу интуитивно
Код

Pattern p = Pattern.compile(".*искомая подстрока.*");
Matcher m = p.matcher(str);
if( m.matches() ) str = "";


P.S. http://www.ibm.com/developerworks/ru/edu/j-intermed/section5.html
P.P.S. Проблема

Автор: jk1 9.2.2012, 23:46
Приведите пожалуйста Вашу "искомую подстроку". Скорее всего она содержит неэкранированные служебные символы

Автор: jone31 10.2.2012, 07:53
Цитата(mstalker26 @  9.2.2012,  23:28 Найти цитируемый пост)
Pattern p = Pattern.compile(".*искомая подстрока.*");Matcher m = p.matcher(str);if( m.matches() ) str = "";

выдаёт туже ошибку что и впервом посте.

сделал вот так:
Код

if( str.indexOf("искомая подстрока") >= 0 ) str = "";


всё рабоатет.

теперь другая проблемма:
если указывают в искомой полдстроке что то похожее на патерн: 
Код

if( str.indexOf("(искомая подстрока1)|(искомая подстркоа2)|(искомая подстрока3)") >= 0 ) str = "";


то ничего не рабоатет. :( что не хватает тут, я в регулярках полный кран... 

Автор: lBugl 10.2.2012, 08:08
Код

if( str.indexOf("(искомая подстрока1)|(искомая подстркоа2)|(искомая подстрока3)") >= 0 ) str = "";

"то ничего не рабоатет. :( что не хватает тут, я в регулярках полный кран..."

имхо тут не хватает поддержки регулярных выражений методом indexOf().. =)

подстрок много?
Код

if( str.indexOf("(искомая подстрока1) >= 0 || str.indexOf("(искомая подстрока2) >= 0 || str.indexOf("(искомая подстрока3))") >= 0 ) str = "";

Автор: Pawl 17.2.2012, 21:45
Цитата(jone31 @  10.2.2012,  07:53 Найти цитируемый пост)
если указывают в искомой полдстроке что то похожее на патерн:...

на самом деле так указывать не надо. Как уже говорили, в java нет
Цитата(lBugl @  10.2.2012,  08:08 Найти цитируемый пост)
поддержки регулярных выражений методом indexOf()

Вам нужно скомпилить все Ваши 
Цитата(lBugl @  10.2.2012,  08:08 Найти цитируемый пост)
"(искомая подстрока1)|(искомая подстркоа2)|(искомая подстрока3

как единый паттерн. Приведу простенький пример, как в массиве строк элементы, содержащие числа или знаки препинания заменяются пустыми строками. Надеюсь, это Вам поможет smile
Код

import java.util.*;
import java.util.regex.*;

public class RegExTest1 {
    public static void main(String[] args) {
     String [] ss = {"abc","a2q","22zz","zz,t","ghu54"};
     
        Pattern p = Pattern.compile("\\p{Alpha}*?[\\p{Punct}|\\p{Digit}]+\\p{Alpha}*?");
        
        for (String s : ss) {
            Matcher m = p.matcher(s);
            if( m.matches()) {
                s = "";
            }
            
            System.out.println(s);
     }          
      }
}

P.S. Писал "на коленке", поэтому могут быть неточности, но смысл, думаю, понятен.
P.P.S. Да, и еще раз повторюсь: для анализа строки на соответствие регулярному выражению этого
Код

if( str.indexOf("искомая подстрока") >= 0 ) str = "";

ненужно ВООБЩЕ, ибо все работает и так!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)