我在iOS学习正则表达式,看过本教程:http://www.raywenderlich.com/30288/nsregularexpression-tutorial-and-cheat-sheet
对于\ b:
,它的内容如下所示\ b匹配单词边界字符,例如空格和标点符号。 to \ b将匹配“to the moon”和“to!”中的“to”,但它与“明天”不匹配。 \ b对于“全字”类型匹配很方便。
和\ s:
\ s匹配空格字符,例如空格,制表符和换行符。你好\ s将在“嗯,你好!”中匹配“你好”。
我有两个问题:
1)what is the difference between \s and \b? when to use which?
2)\b is handy for "whole word" type matching -> Don't understand the meaning..
需要对这两者有所指导。
答案 0 :(得分:19)
\b
边界字符 \b
匹配边界本身但不匹配边界字符(如逗号或句点)。它本身没有长度,但可用于在单词的末尾找到 e。
例如在句子中:“你好,这是一个测试。测试”
正则表达式e\b
将匹配e,如果它位于单词的末尾(后跟单词边界)。请注意,在下图中,“test”和“Testing”中的e不匹配,因为“e”后面没有边界。
\s
空白 \s
匹配实际的空格字符(如空格和制表符)。在同一个句子中,它将匹配单词之间的所有空格。
由于\b
单独没有多大意义,我向e\b
(上图)展示了如何做到这一点。 OP(在评论中)询问e\s
与e\b
相比较的内容,以更好地解释\b
和\s
之间的差异。
在同一个字符串中,e\s
只有一个匹配,而e\b
有两个匹配,因为逗号不是空格。请注意,e\s
匹配(图片3)包含空格,而e\b
匹配则不包含(图片1)。
答案 1 :(得分:2)
\b
为零宽度。也就是说,它实际上并不匹配任何角色。同时,\s
匹配一个字符。这是捕获和更复杂的正则表达式的重要区别。
例如,假设您要尝试匹配以多个零开头的数字,例如007
或000101101
。你可以试试:
0+\d*
但请注意,这也会匹配1007
和101000101101
!那么,您可以尝试:
\s0+\d*
但是看看它与字符串开头的007
不匹配(因为没有空格字符)?使用\b
可以获得“整个单词(或数字)”:
\b0+\d*
答案 2 :(得分:2)
\b
与word boundary匹配。这是一个零宽度断言,意味着它不匹配一个字符,匹配一个位置,某个条件为真。
\b
与\w
有关。 \w
定义“单词字符”,表示字母,数字和下划线。所以\b
现在匹配从单词字符到非单词字符的变化,或者相反。表示它匹配单词的开头和结尾,但不是单词之前或之后的字符。
\s
是predefined character class,匹配任何空格字符。
\bFoo\b
matches here on Regexr \sFoo\s
matches here on Regexr 答案 3 :(得分:0)
\b
匹配任何不是字母或数字的字符,而不包括在匹配中。
\s
仅匹配空格。
例如: \ b匹配其中任何一个:“!?,。@#$%^& *()_ +”。
$text = "Hello, Yo! moo .";
$regex = "~o\b~";
^ ---将匹配所有三个o。
$text = "Hello, Yo! moo .";
$regex = "~o\s~";
^ ---只会匹配'moo'中的'o'。