Java RegEx: очень специфическое соответствие - PullRequest
0 голосов
/ 20 марта 2011

Я пытаюсь сопоставить дефис во всех ситуациях, кроме тех случаев, когда ему предшествует пробел и затем не пробел.

x-y   //match
x - y //match
x- y  //match
x -y  //not match

Я хочу, чтобы регулярное выражение определяло соответствие на основе вышеуказанных требований, но учитывало только отрицательный знак. Возможно ли это?

Спасибо!

Отредактировано для точности.

Ответы [ 2 ]

4 голосов
/ 20 марта 2011

Возможно использование отрицательного взгляда за спиной и положительного прогнозирующего утверждения ( документы ):

(?<!\s)-|-(?=\s)

Что говорит: сопоставить любой дефис либо (без предшествующего пробела), либо (после пробела). Это то же самое, что сказать «, а не (с предшествующим пробелом) и (с последующим непропуском)», согласно законам Де Моргана .

0 голосов
/ 20 марта 2011

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

Pattern regex = Pattern.compile(
    "  (?<=\\S)-(?=\\S)  # x-y   //match\n" +
    "| (?<=\\s)-(?=\\s)  # x - y //match\n" +
    "| (?<=\\S)-(?=\\s)  # x- y  //match", 
    Pattern.COMMENTS);

Эта логика может быть сокращена (за счет некоторой читабельности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...