java正则表达式基本语法

正则表达式(英语:Regular Expression)原属于计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里边,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,Perl,Shell,R,Java等等。

元字符描述
\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。

 

^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*

匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。

 

+匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
{n}

n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

 

{n,}n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m}m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
?当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

     元字符是一个预定义的字符。


正则表达式  描述
\d  匹配一个数字,是 [0-9] 的简写
\D 匹配一个非数字,是 [^0-9] 的简写
\s匹配一个空格,是 [ \t\n\x0b\r\f] 的简写
\S匹配一个非空格
\w  匹配一个单词字符(大小写字母、数字、下划线),是 [a-zA-Z_0-9] 的简写
\W 匹配一个非单词字符(除了大小写字母、数字、下划线之外的字符),等同于 [^\w]

   限定符定义了一个元素可以发生的频率。

正则表达式 描述 举例
*  匹配 >=0 个,是 {0,} 的简写 X* 表示匹配零个或多个字母 X,.*表示匹配任何字符串
+匹配 >=1 个,是 {1,} 的简写   X+ 表示匹配一个或多个字母 X
?匹配 1 个或 0 个,是 {0,1} 的简写X? 表示匹配 0 个或 1 个字母 X
{X}只匹配 X 个字符 \d{3} 表示匹配 3 个数字,.{10}表示匹配任何长度是 10 的字符串
{X,Y}  匹配 >=X 且 <=Y 个 \d{1,4} 表示匹配至少 1 个最多 4 个数字
*? 如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符),而不是默认的贪婪模式 

Java中的反斜杠:反斜杠 \ 在 Java 中表示转义字符,这意味着 \ 在 Java 拥有预定义的含义。

这里例举两个特别重要的用法:

  • 在匹配 . 或 { 或 [ 或 ( 或 ? 或 $ 或 ^ 或 * 这些特殊字符时,需要在前面加上 \\,比如匹配 . 时,Java 中要写为 \\.,但对于正则表达式来说就是 \.。
  • 在匹配 \ 时,Java 中要写为 \\\\,但对于正则表达式来说就是 \\。

注意:Java 中的正则表达式字符串有两层含义,首先 Java 字符串转义出符合正则表达式语法的字符串,然后再由转义后的正则表达式进行模式匹配。

表达式:[ ]与()

  • [jpg|png] 代表匹配 j 或 p 或 g 或 p 或 n 或 g 中的任意一个字符。
  • (jpg|png) 代表匹配 jpg 或 png。

正则中的前瞻,后顾,负前瞻,负后顾四个概念

前瞻: exp1(?=exp2) 查找exp2前面的exp1

后顾: (?<=exp2)exp1 查找exp2后面的exp1

负前瞻: exp1(?!exp2) 查找后面不是exp2的exp1

负后顾: (?<!=exp2)exp1 查找前面不是exp2的exp1

如:b.regexp("(?<!\\\\)[\\s]*+")表示匹配前面不是\\的n(n>=0)个空格

[\\s]* 表示>=0 个空格

如:b.regexp("([^=:\\s]|(?<=\\\\)\\ |(?<=\\\\)\\=|(?<=\\\\)\\:)+")

(?<=\\\\)表示 \

表示匹配字符串以=:空格其中一个开始 或 \\ 或 \\= 或 \\: 多个

例如:b.regexp("^\\[.*?\\]$") 匹配前后[ ]

例如:b.regexp("^\\s*+\\-\\s") 匹配“   - xxxxx ”

中文匹配:

[\u4e00-\u9fa5]+ 代表匹配中文字。

可以在正则的开头指定模式修饰符:

  • (?i) 使正则忽略大小写。
  • (?s) 表示单行模式("single line mode")使正则的 . 匹配所有字符,包括换行符。
  • (?m) 表示多行模式("multi-line mode"),使正则的 ^ 和 $ 匹配字符串中每行的开始和结束。

————————————————
版权声明:本文为CSDN博主「lxlmycsdnfree」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lxlmycsdnfree/article/details/90257822

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值