2015-04-11 2 views
2

Хотя я прочитал большое количество сообщений по этой теме (в частности, используя поисковые запросы), я не понял, может ли этот более общий случай быть разрешен с использованием регулярных выражений.java regex: отрицание совпадения

установки:
1) вход регулярное выражение передается в
2) вход регулярное выражение встроен в отрицательного регулярное выражение так, что
3) все, что не идентифицируется входным регулярное выражение сопоставляется

Пример:

дано:

input regex: "[-//s]"; 

и

text: "self-service restaurant" 

Я хочу отрицательное регулярное выражение, в котором встраивать мой вход регулярное выражение, так что я могу соответствовать мой текст:

"self", "service", "restaurant" 

Важно отметить, что отрицательное регулярное выражение должно также могут соответствовать простой строке, например:

"restaurant" 

Обратите внимание, что я хочу сделать, может быть достигнуто изменением входного регулярное выражение из

"[-//s]" 

в

"[^-//s]" 

Тем не менее, я после того, как более общий подход, при котором любое регулярное выражение может быть переходит в отрицательное регулярное выражение.

+0

попробовать '[^ - \\ s] +'.Используйте то же самое для всех. –

+2

Похоже, вы хотите «разбить» вашу строку на переданном регулярном выражении (вы можете просто захотеть окружить переданное регулярное выражение '(?: UserRegex) +', чтобы избежать пустых результатов, таких как «fo-o» .split («- "), где результат будет" ["fo", "", "o"] '). – Pshemo

+0

'String myRegex =" [^ "+" yourRegexHere "' может сделать трюк, если я правильно понял ваш вопрос. – JonasCz

ответ

1

Вы можете достичь этого путем согласования или расщепления.

  1. Через сопоставление.

    String s = "self-service restaurant"; 
    Matcher m = Pattern.compile("[^-\\s]+").matcher(s); 
    while(m.find()) { 
        System.out.println(m.group()); 
    } 
    

Вы должны поместить образец внутри инверсный класса символов, чтобы соответствовать всем символам, кроме присутствующего внутри инверсного класса.

  1. Через расщепление.

    String s = "self-service restaurant"; 
    String parts[] = s.split("[-\\s]+"); 
    System.out.println(Arrays.toString(parts)); 
    

это разделит свой вклад в соответствии с одним или несколькими космическими или дефис символов. Позже вы можете присоединиться к ним, чтобы получить желаемый результат.

  1. С помощью замены.

    String s = "self-service restaurant"; 
    System.out.println(s.replaceAll("[-\\s]+", "\\\n"));