Регулярное выражение для сопоставления отрицания привязки и строки - PullRequest
2 голосов
/ 15 июня 2011

Я пытаюсь добавить пробел перед определенной строкой (например, Token), заменив регулярное выражение на другое: somethingToken должно стать something Token, но something Token должно остаться something Token_ и не something Token (с 2 пробелами)

У меня возникли проблемы с поиском регулярного выражения, которое бы соответствовало непробельному символу, а затем токену, но без включения непробельного символа в совпадении (в противном случае его также заменили бы). (Неудачная) попытка состояла в том, чтобы попытаться отменить якорь \b (который должен соответствовать началу слова), но я не знаю, смогу ли я отменить якорь. Любая помощь по этому вопросу приветствуется. Благодарю.

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

Я только что нашел ответ на этот вопрос, возможно, он будет полезен для кого-то еще:

\BToken 

, который представляет отрицательную границу слова, поэтому по существу совпадает везде, где стандартная граница слова (\ b) делаетне соответствует.Для моего примера это действительно соответствует что-то токен , но не что-то токен , который остается как есть.

1 голос
/ 15 июня 2011

В Java это может быть достигнуто следующим образом:

final String text = "fooToken foo Token";

// Prints 'foo Token foo Token'
System.out.println(text.replaceAll("(?<=\\S)(?=Token)", " "));

Концепции здесь - взгляд назад и взгляд вперед.См. Regex Tutorial - Lookahead и Lookbehind утверждения нулевой ширины для получения дополнительной информации.

0 голосов
/ 15 июня 2011

(?<!\u0020)(?=Token)

Это будет искать не пробел, затем будет искать токен, но не иметь ширины. Таким образом, вы можете заменить это совпадение пробелом.

Редактировать: если вам это нужно для работы в Javascript, \u0020?(?=Token) Сделайте пробел необязательным, тогда вы замените пробел без изменений.

...