您的位置:首页 > 编程语言 > Java开发

再次复习java正则表达式

2016-01-07 11:14 435 查看
字符  描述
\    将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^    匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$    匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
*    匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+    匹配前面的子表达式一次或多次。例如,'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'。
.    匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern)    匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)    匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)    正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)    负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y    匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz]    字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz]    负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z]    字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z]    负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b    匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B    匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx    匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d    匹配一个数字字符。等价于 [0-9]。
\D    匹配一个非数字字符。等价于 [^0-9]。
\f    匹配一个换页符。等价于 \x0c 和 \cL。
\n    匹配一个换行符。等价于 \x0a 和 \cJ。
\r    匹配一个回车符。等价于 \x0d 和 \cM。
\s    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S    匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t    匹配一个制表符。等价于 \x09 和 \cI。
\v    匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w    匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W    匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn    匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num    匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n    标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm    标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml    如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un    匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)

Java正则表达式[\\S\\s]*mp3是什么意思

* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。[ ] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。注:”\\s“,在Java中 '\'  要转义,这样就出现两个  “\” 了------正则表达式[\\S\\s]*mp3  -- 意思 -->  (符合此正则的形式) "_"表示一个空格(白)"#"表示非空白字符1、mp3(mp3前面可以没有,也可以有1个,也可以有多个 "_" )2、mp3  (mp3前面可以没有,也可以有1个,也可以有多个 "#"  )3、#_mp34、"##   mp3"5、"  #####  ##  mp3"--------> 总之,只要后面有 mp3,前面是什么都无所谓!!!

JAVA中的正则表达式“\\[([^\\]]+)\\]”这个表示什么意思?两个转义字符是为了表达什么?

在正则中括号表示字符集,要表示中括号字符必须转义整个正则匹配 中括号中的内容开头的\\[ 匹配" [ "字符尾部的\\]匹配 “]"字符中间的[([^\\]]+),表示所有非"]"字符组成的字符串

Java 正则表达式 regex=".*?" 什么意思。匹配什么内容

. 就表示点*表达式不出现或出现任意次?匹配表达式0次或者1次匹配“.”点号的
.是任意字符*?这两个在一起是 非贪婪模式,尽可能少的匹配所搜索的字符串你这个表达式单独用没什么意义,还可能导致错误,要和其他的组合用才行

Java的正则表达式的"\\w+"是什么意思?

^\w中\w表示字符类(包括大小写字母,数字),后面的+号的作用在前一个字符上,即\w+,表示一个或多个\w,最少一个
追问:
假如"\\w",也就是没有+号了,是匹配多少个字符?
追答:
1个

java 正则表达式 (-|\\.) 什么意思

匹配的-或者.字符串按-或者.分割()表示里边的内容是一个分组|表示或者\\ 由于字符串中的\要转意,所以\\表示\\.表示转意为 .

Java正则表达式 \\d+.?\\d{1,2}

\\d表示数字\\d+表示1个到多个数字?表示0个或1个.?就表示有一个点或者0个点\\d{1,2}表示有一个或者两个数字(就是小数点后面)不限位数\\d+.?\\d+

java pattern 正则表达式中的 '+?' 和 '*?' 分别是什么意思

  + 表示 1个到多个  * 表示 0到多个  ? 表示0或者1个  *?和+?叫做非贪婪匹配  +和*表示尽可能多的匹配  +?和*? 表示尽可能少的匹配  任意字符的范围,如果要匹配带有连续文本,贪婪匹配会使得中间的内容尽可能长,也就是第一个标签的开头和最后一个标签结尾整个作为一个结果返回。  如果是非贪婪的,就会把每一个标签作为单独一个结果返回。

java正则表达式 ^[\u4e00-\u9fa5]?[a-zA-Z][-|.]?\\w{5}$ 什么意思

[\u4e00-\u9fa5]?代表中文字符有1个或者没有[a-zA-Z][-|.]?代表英文字母,减号、竖线、点有一个或没有\\w{5}代表表字母数字下划线出现5个这个表达式的意思就是开头是一个汉字(可以没有)紧接着是一个字母或减号或竖线或点(可以没有)再后面是5个字母数字下划线结尾的一个字符串规则例如我|sssss,sssss 就符合这个定义我我|sssss就不匹配
追问:
谢谢  可以前面还有个^呢
追答:
开头的^表示强制要求字符串开头匹配,一般同结尾的$一起使用如果不带^,就是非精确匹配,比如某字符串中间有一小段是符合匹配要求的,这时候如果用不带^的表达式是可以匹配通过的,但带^的表达式就匹配不了

java中正则表达式:"^[\\s&&[^\\n]]*\\n" 是什么意思?

\s 空白(空格符,换行符,回车符,制表符)^表示模式的开始,如^he匹配所有以he开头的字符串.n* 重复前面的子模式0次或多次 n[ ] 由方括号内的一个字符列表创建的自定义字符类 这个正则式很奇怪,大概意思是:以(空格&&回车(以回车开头))为开头,这个开头可以0次或多次,然后一个回车结束说实在的,不懂你要用这个匹配什么东西

深入入门正则表达式(java) - 1 - 入门基础

博客分类: 正则表达式java正则regular expressionandroid 深入入门正则表达式(java) - 引言深入入门正则表达式(java) - 1 - 入门基础 深入入门正则表达式(java) - 2 - 基本实例深入入门正则表达式(java) - 3 - 正则在java中的使用深入入门正则表达式(java) - 匹配原理 - 1 - 引擎分类与普适原则深入入门正则表达式(java) - 匹配原理 - 2 - 回溯 1.元字符很多人对正则表达式的印象就是乱码。。许许多多的符号组合在一起,偶见单词,正则确实是这样的,所以下面我们要看看这些符号都是什么意思有些符号不是大家看到的字面上的意思:比如“.”、“!”、“?” ……这些符号就称之为元字符 很遗憾,这些字符的意义必须牢记注意:本文的所有红色加粗中文引号内的内容均为正则表达式,而不是一般的字符和符号 下面我们逐一说明“\” :转义符号,在字符组内依然是元字符。 在检查一行文本时“^” :脱字符:表示一行的开始“$” :美元符号:表示一行的结束 字符组“[]” :一对中括号,里面可以添加任何内容,比如[hate],括号里面的内容是或者的关系,这个正则的意义是:我想匹配一个字符,这个字符可以是h,可以是a,也可以是t或e。记住:字符组最终只会匹配一个字符。 即使你的目标字符串是hate,那么一次匹配成功的结果也只是第一个字母h,并不是整个单词,如果我就想匹配hate这个单词怎么办?很容易,正则内容为“hate”,在字符组外面的字符的关系是“和,并且”的意思。 注意:字符组内的元字符和字符组外的元字符并不一样,即使字符一样,表示的意义也未必相同 (*)我们先学习下一个内容,然后再来给大家解释上面的这句话 “[^]” 括号里面以“^”开头,是字符组的否定形式 ,比如:[^hate]表示:匹配除了h、a、t、e以外的其他字符,依然只会匹配一个字符之前刚刚学过“^”表示一行的开始,但是脱字符位于[]内的起始位置则表示否定,这也解释了(*) 的内容如果脱字符位于括号内其他位置表示什么呢?那它表示它自己,此时并不再是一个元字符 “-” :减号,可以在字符组内表示区间、范围。比如“[a-z]”,表示匹配a到z直接的任意一个小写字母,如果是“[-z]”,那么“-”只表示它自己,没有任何特殊意义,它在字符组外也没有任何特殊意义。ps:关于“^”、“$”、“-”的其他用法将在高级基础篇讲述 “.” :点号,匹配一个任意字符的字符组简便写法。“.”在字符组内没不是元字符ps:“.”也不是万能的,有些字符无法匹配,之后会详细解释并给出替代方案 “|” :竖线,表示或者,这个很容易记忆,如果想匹配hate或者like,那么正则为:“hate|like”注意:如果想匹配I hate you和I like you。那么正则为:“I (hate|like) you”。如果写成“I hate|like you”,那么匹配的结果为“I hate”或者是“like you”了这里圆括号的作用是控制竖线的作用范围,“()”有很多作用,稍后再说(对于传统NFA来说,选择结构是按顺序的,并不是匹配优先也不是忽略优先,关于NFA请参看 深入入门正则表达式(java) - 匹配原理 - 1 - 引擎分类与普适原则 ) “\b” :它的作用是单词分隔符,如果我想匹配like,那么正则为“like”,没错,但是会得到一些我不想要的结果,比如likely也会跑到结果集中,我可不想要这些单词。那么修改正则为:“\blike\b”,这回就只能匹配like这个单词了。注意:java中的单词分隔符为“\b”,有些语言的单词分隔符为“\<” “\>” 。单词边界是什么呢?其实正则没有那么聪明,它不会识别“Ilikeyou”为“I like you”,它只是找到数字和字母的起始位置和结束位置而已 “\w” :单词字符。在java中相当于“[a-zA-Z0-9_]”。 但是java中的“\b”却支持Unicode字符。 下面我们来看看正则中的“数字” - 量词“?” :表示0个至1个“*” :表示0个至任意多个“+” :表示至少一个“{min,max}” :区间量词。“{2,5}”,表示匹配2到5次。“{2,}”表示至少两次,“{2}”表示只匹配两次。 “{,2}”,正则错误,无意义举个例子:正如上面的反面教程所说,如果想匹配一个正整数,那么应该如何来做首先我们需要明确:我不想匹配0123,只想匹配123这样的数字,0不能开头,第二个要求就是除了数字不能有其他字符了之前我们学过字符组了,“[0-9]”可以表示0至9中任意一个数字,那么根据上面的量词,我们改正则为“[0-9]+”,表示至少有一个数字,至多没有限制。但是0123这样的数字也会满足要求。那么我们再修改一下,首先第一位不能为0,那么这一位可以写为“[1-9]”,表示匹配1到9的任何一个数字,之后呢?后面的数字有没有都无所谓了,有,那就是多位数,没有,那就是一位数。所以正则为“[1-9][0-9]*”。 贪婪与懒惰我们再来看一个量词的例子。比如我想匹配一个单词,正则可以这么写“[a-zA-Z]+”。RegexBuddy每次匹配颜色交叉,就能知道每次都匹配到的是什么了我们来看第一次的结果,是“there”有个问题就出来了:“\w+”表示至少一个“\w”,那么为什么结果不是“t”、“h”、“e”、“r”、“e”,而是“there”。上面的量词,除了“{times}”这种指定匹配次数的,其余默认均为贪婪匹配。也就是说尽可能多的匹配。相对的就有惰性匹配,那么惰性匹配如何使用?下面修改一下例子:“\w*e”表示以e结尾的单词,现在这里的*还是贪婪匹配。如果我想匹配到单词中的第一个e,那么如何修改呢?还是来看there,这回“\w+”只匹配了“th”,并没有匹配到“ther”才停止。惰性匹配就是尽可能少的匹配,使用方法就是在量词后面加上“?”如果量词后面没有“?”等其他量词,那么就是默认的贪婪匹配。 “?”,“*”,“+”:也叫匹配优先量词“*?”,“+?”,“??”:也叫忽略优先量词 其实还有一种量词:“?+”,“*+”,“++”:占有优先量词 。 (支持这种量词的正则引擎很少,java支持)这节不讨论这种类型量词,之后的章节讨论 () :将括号里面的内容作为一个独立的单元,理解为一组。 反向引用“\”+数字 :好多语言能记住“()”里面匹配到的内容,比如java。如果我只想使用“()”匹配到的内容,那么可以使用反向引用。比如我想找两个一样的单词,总有不小心写错的时候,可能会出现hate hate这样的时候,那么正则应该如何书写呢?“(hate) \1”这样就能匹配到了 通常我们不只局限于一个单词,那么我们可以写为:“([a-zA-Z]+) \1”,这样也能找到hate hate形式的错误。注意:这里([a-zA-Z]+)表示至少一个英文字母,后面的\1不表示至少一个英文字母,而是表示说与()匹配的结果一致! “([a-zA-Z]+) \1”不是“([a-zA-Z]+) ([a-zA-Z]+)”的简写比如:目标字符串为likely like,“([a-zA-Z]+) ”会匹配到likely和一个空格,“\1”不会匹配“([a-zA-Z]+)”,因为之前括号的结果不是like,所以这次查找失败,无结果。 反向引用中的数字的确定例如“((\d)(\d))\d”来匹配123这个数字。那么“\1”的结果是遇见的第一个括号,就是最外面的,“\1”结果为12。按着顺序“\2”结果为1,“\3”结果为2 最后再说下“()” 反向引用 的开始已经说出了括号的另一个作用,那就是保存捕获的内容,这种类型的括号叫做捕获型括号 ,相对应的就有非捕获型括号“(?:)” “(?:)” :非捕获型括号。“(?:hate)”会匹配到hate这个字符串,但是如果你企图使用反向引用“(?:hate) \1”,那么就会出现错误。这样的操作是非法的。注意:非捕获型括号不影响捕获计数 ,获取“((?:\d)(\d))”中的“(\d)”捕获的内容为\2,不再是\3好处:1.提高效率,很容易理解,不记住捕获的内容也就不占用内存了2.结构清晰 常用空白字符“\s” :表示所有空白字符。“\t” :制表符。“\n” :换行符。“\r” :回车。 一些其他常用的缩略表示“\S” :除“\s”之外的任何字符“\w” :等同于[a-zA-Z0-9_]“\W ” :除“\w”之外的任何字符“\d” :等同于[0-9]“\D” :除“d”之外的任何字符有些工具不支持,比如EditPlus v3.10 中的查找就不支持\d等。 环视(零宽断言)环视分为顺序和逆序,肯定和否定,组合一下一共4种。下面就看看环视到底是什么“(?=)” :顺序肯定环视:(从左至右)查看文本,如果能够匹配,就返回匹配成功信息。“(?<=)” :逆序肯定环视:(从右至左)查看文本,如果能够匹配,就返回匹配成功信息。“(?!)” :顺序否定环视:(从左至右)查看文本,如果不能够匹配,就返回匹配成功信息。“(?<!)” :逆序否定环视:(从右至左)查看文本,如果不能够匹配,就返回匹配成功信息。 下面看几个简单的实例,然后就很容易明白上面的火星语了例:下面有两句话,加入你只想找到book,不想找到booksthere is a book on the desk.there are some books on the desk.最简单的办法是:“book\b”,这很容易理解,book后面跟着单词分隔符,book后面如果是s,那么肯定被认为是一个单词,所以这样不会匹配到books。如果用环视,应该如何书写呢“book(?!\w)”正则中的book很好理解,依次匹配b、o、o、k,然后呢,\w在上面说过等同于[a-zA-Z0-9],“(?!\w)”是说:我要找这样一个位置,这个位置的后面不能是\w。第一句话中,在匹配了book后,发现紧跟的是一个空格,恩,不是\w中的内容,匹配成功。 注意:环视不会占用字符!环视查找的是字符与字符之间的位置。环视括号并没有捕获字符的功效,所以不能使用反向引用。上图画三角号的位置就是这个环视匹配的位置 如果想匹配books的book怎么办,很简单“book(?=s)” 上面演示了肯定顺序环视和否定顺序环视。下面演示了环视不占用字符。比较容易理解吧,这个例子没有任何实际意义,仅做演示用之后会给出一些有意义的例子  2.正则模式与匹配模式此部分内容基本来自《精通正则表达式》 v31.忽略大小写模式: (java中使用Pattern.CASE_INSENSITIVE)2.宽松排列与注释模式: 此模式会忽略字符组外部的所有空白字符 但是在java.util.regex中,字符组之外的所有空白字符并非都被忽略,而是作为一个“无意义字符(do-nothing metacharacter)” 。正则“\12 3”表“3”在“\12”之后,而非表示“\123”(java中使用Pattern.COMMENTS)ps:“空白字符”的定义取决于所采用的字符编码的定义,以及此编码对空白字符的支持程度。大多数程序只能识别ASCII的空白字符。3.点号通配模式(单行模式): (dot-match-all match mode)通常点号是不能匹配换行符的。 但是在java中情况特殊:在sun的正则表达式包,点号能够匹配未使用此模式时点号不能匹配的所有单字符Unicode行终止符。(java中使用Pattern.DOTALL ) 符:Unicode行终止符
字符描述
LFU+000A
VTU+000B
FFU+000C
CRU+000D
CR/LFU+000DU+000A
NELU+0085
LSU+2028
PSU+2029
ASCII换行符
ASCII 垂直制表符
ASCII 进纸符
ASCII 回车
ASCII 回车/换行
Unicode 换行
Unicode行分隔符
Unicode 段分隔符
 4.增强的锚点模式(多行文本模式): (Enhanced line-anchor match mode)此模式影响“^”和“$”的匹配。 通常情况下“^”不能匹配字符串内部的换行符,而只能匹配目标字符串的起始位置。在此增强模式下,它能够匹配字符串中内嵌的文本行的开头位置。“$”也是这样,此模式下可以匹配字符串内部的换行符。这里可能不是很好理解,之后的实例会介绍,其中还包括“\A”,“\Z” “\z” 的意义(java中使用Pattern.CASE_INSENSITIVE)5.文字文本模式: 此模式几乎不能识别任何元字符 。比如此模式下正则“[a-z]+” 匹配的就是字符串“[a-z]+”而并不是连续的小写英文字母(java中使用Pattern.CASE_INSENSITIVE) 上面的几种模式如果没有理解,可以看之后的教程。将会在基本实例和高级基础中讨论。   转贴请保留以下链接本人blog地址http://su1216.iteye.com/http://blog.csdn.net/su1216/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: