\b не соответствует тому, что, как я думал, будет соответствовать

Я использую Java regex для соответствия "dept". в строке "dept. № 2" и не возвращать совпадения с использованием следующего регулярного выражения "\ b (dept \.)\b".

Я понимаю, что \b будет соответствовать пробелам, поскольку они не являются символами слов, но, похоже, это не так. Когда я добавляю \s * к регулярному выражению, как в следующем "\ b (dept \.)\S *\b", я получаю успешное совпадение.

Способ, которым я читал свое оригинальное регулярное выражение, - это совпадение. (с буквальным периодом) между границами слов. Разве это не правильное чтение этого?

Какая глупость я не делаю/не вижу здесь?

1 ответ

\b соответствует чему-то по строкам: (^\w|\w\W|\W\w|\w$).

Другими словами, символ слова ([a-zA-Z0-9_]) рядом с символом не-слова (или в начале/конце строки). Вы в настоящее время пытаетесь использовать \.\b для соответствия "."; период будет соответствовать, но за ним не следует граница слова (так как это два неглавных символа).

Вот почему вы можете добавить в \s* и он будет работать, потому что теперь граница слова будет соответствовать пробелу между "n". Я предлагаю вам просто использовать выражение \b(dept\.), Так как \. является почти синонимом \b в вашем сценарии (t текстового символа, а затем \. а несловообразующий характер).

licensed under cc by-sa 3.0 with attribution.