Обычно вы используете границы слов: \bra\b
соответствует только ra
само по себе, а не внутри слова.К сожалению, подчеркивание рассматривается как буквенно-цифровой символ, поэтому index_ra
не будет совпадать.
Поэтому вам нужно реализовать это самостоятельно.Предполагая, что ваш regex dialext поддерживает Unicode и обходные утверждения, используйте
(?<!\p{L})foo(?!\p{L})
Это соответствует foo
, но не foobar
или bazfoo
:
(?<!\p{L}) # Assert that there is no letter before the current position
foo # Match foo
(?!\p{L}) # Assert that there is no letter after the current position
Если вы можете 't использовать классы символов Unicode, попробуйте это:
(?<![^\W\d_])foo(?![^\W\d_])
Это немного искаженная логика (тройной минус для выигрыша!): [^\W\d_]
соответствует букве (= символ, который не является буквенно-цифровымсимвол, а не цифра или подчеркивание), поэтому отрицательные утверждения позволяют убедиться, что вокруг строки поиска нет букв («не a not (не алфавитно-цифровая, не цифра или подчеркивание)»).Скручено, но необходимо, так как мы также хотим, чтобы начало и конец строки соответствовали здесь.