我正在尝试匹配跟随单词边界\b
的表情符号。
比如说,我想匹配后面跟着\b
的:p
和:)
。
/(:p)\b/
可以正常工作,但为什么/(:\))\b/
的行为相反呢?
我正在尝试匹配跟随单词边界\b
的表情符号。
比如说,我想匹配后面跟着\b
的:p
和:)
。
/(:p)\b/
可以正常工作,但为什么/(:\))\b/
的行为相反呢?
这里不能使用单词边界(word boundary) ,因为)
是一个非单词字符。
简而言之:
\b
可以让你在正则表达式中以\bword\b
的形式执行全词匹配搜索。单词字符是指用于构成单词的字符。所有不是单词字符的字符都是非单词字符。
使用(:\))
来匹配:)
并捕获在第一个捕获组中。
使用/(:\))(?![a-z0-9_])/i
来避免匹配每个笑脸后跟有字母的情况,它相当于(:\))\B
。
\B
是\b
的否定版本。\B
在\b
不匹配的任何位置都会匹配。 实际上,\B
在两个非单词字符之间的任何位置和任何两个单词字符之间的位置都会匹配。
/(:\))/
匹配的是 ":)p",但我不想匹配这个。那么应该怎么做呢? - httpete/(:\))\B/
正按照我想要的方式运作,你怎么解释这个? - httpete/[a-z0-9_]/i
的等价形式”是否更好? - Wiktor Stribiżew\w
等同于 [\p{L}\p{N}_]
,而且当正则表达式引擎使用不同的语言环境编译时,\w
可能会有所不同。因此,当可用前瞻时,: \)(?!\w)
<=> :\)\B
更加防水。 - Casimir et Hippolyte(:\))\B
何时使用哪个示例:
\b
:字符串=That man is batman.
正则表达式=\bman\b
仅匹配man
而不是batman中的man
,因为tm
之间的位置不是单词边界(它是一个单词)。
\B
:字符串=I am bat-man and he is super-man.
正则表达式=\B-\B
匹配super-man
中的-
,而\b-\b
匹配bat-man
中的-
,因为t-
和-m
之间的位置是单词边界,而(空格)-
,-(空格)
不是。\b
或\B
视为两个字符之间的位置,并且从字符到字符的转换是单词到单词
或单词到非单词
,那么这很容易理解。
\w
字符类中的一个字符和\W
字符类中的一个字符之间的限制,或者是字符串的开头或结尾的限制。 - Casimir et Hippolytep
是一个单词,)
不是。 - Maroun:))
或者:)%
或类似的东西吗? - JimmyB