正则表达式单词边界无法识别标点符号

标签 regex word-boundary

我有一个特定的正则表达式:

#\b[a-z0-9-_%"]+\b#gi

我有以下测试字符串,我正在将该正则表达式过滤器应用于:
abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30%

但是,检测到的词边界如下(方括号代表边界):
[abc] [def] [ghi] [jkl] [mno] %%[car%] [__car_] [tall-person] "[thing"] [20%] %[30%]

因此,某些类型的标点符号(“_”)在单词的开头和结尾都被识别为“单词字符”。另一方面,其他类型(“%”或双引号)在单词开头时会被忽略。为什么是这样?

最佳答案

在字边界,意味着 \w元字符(在大多数正则表达式引擎中):[A-Za-z0-9_] ; % , "不在那个字符中:匹配单词边界。

我认为你不需要使用词边界:

// javascript example
> 'abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30%'.match(/[a-z0-9-_%"]+/g)
["abc", "def", "ghi", "jkl", "mno", "%%car%", "__car_", "tall-person", ""thing"", "20%", "%30%"]

关于正则表达式单词边界无法识别标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309519/

相关文章:

php - 奇怪的 PHP 正则表达式通知

regex - 使用 REGEXMATCH 从列表中取出剩余项目的列表 - + 号问题

java - Java 中用于拆分字符串的正则表达式

javascript - 匹配任何非单词字符(不包括变音符号)

python - 可选的结束符号和使用正则表达式捕获的几个单词

php - MySQL REGEXP 仅匹配边界词,但不包括 html 标签中的匹配

c# - 正则表达式:加号之前的单词边界

php - 在空格或点之前将字符串截断为最大长度以避免打断​​单词

javascript - 将单词边界 anchor 应用于单个正则表达式中的所有标记

python - 提取谷歌搜索结果