正则表达式匹配完整单词时如何忽略换行符\n?
解决正则匹配换行符旁
cat的问题 原正则的问题
你写的"\b(?i)cat\b"存在两个关键问题:
- 在Kotlin字符串中,
\b会被解析为退格字符,而非正则表达式中的单词边界,必须写成\\b才能表示正则的单词边界。 - 即使修正转义后,
\\b匹配的是「单词字符(字母/数字/下划线)」与「非单词字符」的边界——它会匹配\ncat中的边界,但如果你需要严格限定cat两侧是空白字符(包括换行、空格、制表符等),而非任意非单词字符,\\b就不符合需求。
修改后的正则
要匹配两侧为空白字符(或字符串首尾)的完整cat单词,且不区分大小写,可以使用以下正则:
val myRegex = "(?i)(?<=^|\\s)cat(?=\\s|$)"
正则解释
(?i):开启不区分大小写模式,可匹配Cat/CAT等变体(?<=^|\\s):反向预查,确保cat的前面是字符串开头,或者任意空白字符(\\s包含换行\n、空格、制表符等)(?=\\s|$):正向预查,确保cat的后面是任意空白字符,或者字符串结尾
测试验证
针对你的测试文本:
"""xsdsdsds\ncat xsdhidhf"""
修改后的正则会成功匹配其中的cat,因为它前面是换行符(属于\\s),后面是空格(也属于\\s)。
内容的提问来源于stack exchange,提问作者JohnBigs
相关产品推荐
相关产品推荐

