Java Regex для соответствия пробелу или началу строки

1

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

"This is the word."
"word is this."

И следующее не должно:

"This is preword."
"wordness is this."

Моим первоначальным решением было следующее:

(^|\\s)word(\\s|,|\\.)

Но он не фиксирует случай, когда слово появляется в начале строки. Как я могу правильно использовать карат для этого?

  • 4
    Можете ли вы предоставить ожидаемый ввод и вывод?
  • 1
    если вход содержит только строковое word то вам нужно указать конечный шаблон $
Показать ещё 1 комментарий
Теги:

2 ответа

4
Лучший ответ

Кажется, что вы ищете границы слов \b.

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

пример

foo foo foo foo foo

Если вы хотите найти foo который мог бы, например,

  • перед началом строки или пробела
  • после окончания строки или пробела

поэтому regex может выглядеть как (^|\\s)foo(\\s|$)

вы бы соответствовали

foo foo foo foo foo
^^^^   ^^^^^   ^^^^

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

foo foo foo foo foo
   X^^^^             cant use space marked with 'X'

поэтому следующая подстрока будет

foo foo foo foo foo
       ^^^^^

а потом

foo foo foo foo foo
               ^^^^

Для решения этой проблемы вы можете использовать \b который представляет собой место между символами из \w (az AZ 0-9 и _) и любым символом, который не находится в \w.

Поэтому попробуйте с помощью \bword\b вместо этого (который в \bword\b Java должен быть записан как "\\bword\\b")


Кстати, вы, вероятно, должны окружить свое слово цитатой \Q...\E если она содержит специальные символы регулярных выражений.

Поэтому ваше регулярное выражение может выглядеть как "\\b\\Qword\\E\\b".

2

Java regex поддерживает границу слова \b metacharacter:

\bword\b

Обратите внимание, что Java примет любой действительный символ Юникода для слова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню