2012-02-17 3 views
0

Я пытаюсь использовать регулярное выражение (которое я только начинаю с), чтобы найти последовательности с 1 несоответствующим символом. Например, образец «нан» и текст «банан» я бы хотел найти «запрет» и «нан», первый был приемлемым с несоответствием «b» и «n». Проблема, с которой я сталкиваюсь, состоит в создании шаблона регулярных выражений, не прибегая к созданию отдельных подстановочных вставок, где я хочу их.Поиск строк с помощью Regex

final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"}; 
    final String text = "banana"; 

    for(String pattern : patterns) 
    { 
     Pattern p = Pattern.compile(pattern); 
     Matcher m = p.matcher(text); 

     while(m.find()) 
     { 
      System.out.println(m.start() + " " + m.group()); 
     } 
    } 

Это то, что у меня есть как тест, который является своего рода неуклюжим способом получить то, что я хочу (хотя и с некоторыми дублей). Для такого рода поиска строк с помощью одного несоответствия регулярное выражение является эффективным средством или я должен попробовать изменить традиционные алгоритмы, такие как Horspool или KMP?

ответ

0

К сожалению, регулярные выражения предназначены для того, чтобы вы были очень точны в шаблоне, который вы собираетесь сопоставлять, наоборот, мало поддержки приблизительного соответствия. Однако библиотека TRE была разработана именно для этой цели (http://laurikari.net/tre/)

Смежные вопросы