本文的正则用Java代码表示

要看本篇博客首先你得会,别人给你个正则表达式你得熟练写出Java代码,这里有一篇Java正则的基础:
Java正则的基本用法

\b和\B的区别

\b和\B都是边界符。不同的是\b是单词分界符,而\B是非单词分界符。
这样也就注定了它们的匹配是不同的。

\b的用法

这里的\b,单词边界符能够匹配中文符号、英文符号、空格、制表符、回车符号,以及各种边界,比如单词在开头,单词在结尾。
这里要匹配的2也可以是中文。正则是可以处理中文的。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class p3{
    public static void main(String args[]){
        String sta=",2,";
        String regex="\\b2\\b";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher=pattern.matcher(sta);

        while(matcher.find()){
            System.out.println(true);
            System.out.println(matcher.group());
        }
    }
}

运行结果:

true
2

\B的用法
\B是非单词分界符,即可以查出是否包含某个字,如“北斗狼神”中是否包含“狼”这个字。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class p2{
    public static void main(String args[]){
        String sta="北斗狼神";
        String regex="\\B狼\\B";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher=pattern.matcher(sta);

        while(matcher.find()){
            System.out.println(true);
            System.out.println(matcher.group());
        }
    }
}

运行结果:

true

上面就是\b和\B的基本用法。

\b和\B的注意事项

因为\b和\B是边界匹配符,所以一般不用来判断当前字符串是否符合某种规则,这样是不行的。

import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class p1{
    public static void main(String args[]){
        String sta=" 1 ";
        String regex="\\b1\\b";

        System.out.println(sta.matches(regex));

    }
}

运行结果:

false

刚开始我以为输出的是true,结果是false

所以\b和\B这种边界符一般用来获取,而不是用来判断、替换。

但是,我就想知道\b到底为什么不能够匹配上面这个例子呢???而不仅仅说它是边界匹配符就了事了,那如果我问你,什么是边界符匹配呢???你是否能够答上,而不是仅仅背概念那么简单!!!

好,那么看这个例子:

import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class p1{
    public static void main(String args[]){
        String sta="(??213lang狼13我是华丽分界线中文问号和英文问号?????我是华丽分界线空格 我是华丽分界线换行\n我是华丽分界线制表符 ";
        String regex="\\b";

        String arrays[]=sta.split(regex);
        for(String i:arrays){
            System.out.println("["+i+"]");
        }

    }
}

运行结果:

[(??]
[213lang狼13我是华丽分界线中文问号和英文问号]
[?????]
[我是华丽分界线空格]
[ ]
[我是华丽分界线换行]
[
]
[我是华丽分界线制表符]
[       ]

那么是不是有所启发了??单词边界就是,单词和符号的边界,这里的单词可以是数字、英文单词、中文单词并且这些单词不互斥。而符号可以是英文符号、中文符号、空格、制表符、换行,而符号间不互斥。

就是因为\b是匹配这种边界。所以当我们想判断“ 1 ”用正则规则“\\b1\\b”是否匹配的时候,这是不能够匹配的。因为空格不是边界,而空格和1之间那个边界才是\b匹配的边界。

所以只有当我们这样写才是true
看例子:

public class p4{
    public static void main(String args[]){
        String sta="1";
        String regex="\\b1\\b";

        System.out.println(sta.matches(regex));
    }
}

运行结果:

true

反之,\B的边界就是单词和单词之间的边界。这种事情根本就是想都不用想了。对不对呢??各位读者??
不过还是来个例子吧!!

首先我要声明\B相当于[^\b]。
看例子:

public class p5{
    public static void main(String args[]){
        String sta="123lang北斗狼神-,??????-";
        String regex="\\B";

        String arrays[]=sta.split(regex);
        for(String i:arrays){
            System.out.println("["+i+"]");
        }
    }
}

运行结果:

[1]
[2]
[3]
[l]
[a]
[n]
[g]
[北]
[斗]
[狼]
[神-]
[,]
[,]
[?]
[?]
[?]
[?]
[?]
[?]
[-]

是不是有点让人惊讶??还是你的意料之中??

感觉意料之中的人就不用看下面了,因为你是个很聪明的人。

感觉惊讶的人,也没什么大不了的,因为作者我想的答案和这个答案也是有出入的。

但是不管怎么样,我们都会走上,懂!!!的那条路!!!

在这个例子开始前我也声明过,\B相当于[^\\b]。^是相反的意思,可以查看API。

所以,\b的作用是单词和符号之间的边界。而我们分割的也是单词和符号之间的边界。所以它的相反面就是,单词和符号之间的边界不是我的边界,而单词和单词之间的边界和符号和符号之间的边界就是我的边界。

所以在这个例子中“北斗狼神”中“神”字后面还有一个符号“-”,即:单词和符号之间的边界不是\B的边界,而单词和单词之间的边界和符号和符号之间的边界就是\B的边界。

正则中\\b和\\B的区别及注意事项的更多相关文章

  1. 迅速“让”的意思是什么?

    我学得很快,但我不是母语为英语的人,只想问’让’意味着什么?我知道它是一个常数,但为什么它不是’缺点’?‘let’是某个单词的缩写吗?),所以现在他们只需要另一个单词,然后他们选择了let.就个人而言,我认为const会更好.

  2. 如何在Swift中获取文本中真实单词的数量

    参见英文答案>NumberofwordsinaSwiftStringforwordcountcalculation4个编辑:已经存在类似于此问题的问题,但它是由特定字符分隔的数字(Getno.Ofwordsinswiftforaveragecalculator).相反,这个问题是要获得文本中真实单词的数量,以各种方式分开:换行符,一些换行符,一个空格,一个空格等.我想用Swift3获取字符串中的单

  3. android – 突出显示通过EditText搜索的所有单词

    您好,我想知道如何突出显示在EditText中输入的所有单词,并将出现在TextView中此帖子与此相关HighlightTextviewUsingEditText解决方法Sayet是您的EditText,电视是TextView对象.使用以下代码:结果是:

  4. Android Tamil字体之间的英文单词

    我有一个TextView有一个巨大的文本之间,我有一个tamil字,我知道如何嵌入tamil字体在单独的文本视图.但我需要英文单词之间的tamil单词请提前感谢我在textview中的部分文字:Seasonalmessageslikewelcome()isusedinKolam.VolunteeringtodrawkolamattempleissometimesdonewhenadeVotee’s

  5. Java正则表达式API边界匹配

    这篇文章主要介绍了Java正则表达式API边界匹配,文章围绕主题展开相应的相关资料,具有一定的参考价值,需要的朋友可以参考一下

  6. PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析

    这篇文章主要介绍了PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法,结合具体实例形式分析了preg_replace()报错的原因与相关解决技巧,需要的朋友可以参考下

  7. PHP正则删除html代码中a标签并保留标签内容的方法 原创

    这篇文章主要介绍了PHP正则删除html代码中a标签并保留标签内容的方法,涉及php基于正则的字符串匹配与子表达式操作相关技巧,需要的朋友可以参考下

  8. php正则删除html代码中class样式属性的方法 原创

    这篇文章主要介绍了php正则删除html代码中class样式属性的方法,涉及php字符串正则匹配相关操作技巧,需要的朋友可以参考下

  9. PHP正则匹配到2个字符串之间的内容方法

    今天小编就为大家分享一篇PHP正则匹配到2个字符串之间的内容方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  10. IOS正则表达式之验证密码身份证手机号

    这篇文章主要介绍了IOS正则表达式之验证密码身份证手机号的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部