JAVA 正则,java
如何解决写爬虫IP受阻的问题?立即使用。
表达的意思:(推荐:java视频教程)
1.特性
字符代表字符a.
\ \反斜杠字符。写的时候写为\ \ \ \。(注意:由于java在第一次解析时将\ \ \解析为正则表达式\ \然后在第二次解析时解析为\ \所以1.1中没有列出的所有转义符,包括1.1中的\ \但带\的都要写两遍)
\0n八进制值为0的字符n(0 \ 0nn八进制值为0的字符nn(0 \ 0八进制值为0的字符mnn(0 \ xhh十六进制值为0x的字符hh)
\ uhhhhhhh字符hhhh十六进制值0x
\ tbag (\u0009 )
\n新行(换行)字符( \u000A )
\r回车( \u000D )
\f分页符( \u000C )
\一个铃铛( \u0007 )
\e转义字符( \u001B )
\cx对应于x的控制字符。
2.字符类
【ABC】a、B或C(简单类)。例如,[egd]意味着它包含字符E、G或d。
[ABC]除A、B或C(负数)以外的任何字符。例如,[EGD]表示不包括字符E、G或D。
[a-zA-Z] a到Z或A到Z,包括两个字母(范围)
[a-d[m-p]] a到D或M到P: [A-DM-P](联合)
[a-z[def]] d,E或F(交集)
[A-Z [BC]] A到Z,除了B和C: [AD-Z](减号)
[A-Z [M-P]] A到Z而不是M到P: [A-LQ-Z](减号)
3.预定义的字符类(注意反斜杠应该写两次,例如,\d写为\\d)任何字符(可能匹配也可能不匹配行终止符)
\d个数字:[0-9]
\D非数字:[0-9]
\s空白字符:[\t\n\x0B\f\r]
\S非空白字符:[\ s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[\ w]
4.POSIX字符类(仅限US-ASCII)(注意反斜杠应该写两次,例如,\p{Lower}写成\\p{Lower})
\p{Lower}小写字母字符:[a-z]。
\ p {大写字符:[A-Z]
\p{ASCII}所有ASCII: [\ x00-\ x7f]
\p{Alpha}字母字符:[\p{Lower}\p{Upper}]
\p{Digit}十进制数字:[0-9]
\p{Alnum}字母数字字符:[\p{Alpha}\p{Digit}]
\ p {punch}标点符号:#$%()* ,-./:@[\]^_`{}~
\p{Graph}可见字符:[\ p {alnum} \ p {punch}]
\p{Print}可打印字符:[\p{Graph}\x20]
\p{Blank}空格或制表符:[\t]
\p{Cntrl}控制字符:[\x00-\x1F\x7F]
\ p { xdighter }十六进制数:[0-9a-fA-F]
\p{Space}空白字符:[\t\n\x0B\f\r]
5.java.lang.Character类(简单的java字符类型)
\p{javaLowerCase}相当于Java . lang . character . islowercase()
\p{javaUpperCase}等效于Java . lang . character . I supper case()
\p{javaWhitespace}相当于Java . lang . character . iswhitespace()
\p{javaMirrored}相当于java.lang.Character.isMirrored()
6.六人一班。Unicode块和类别
\ p {在希腊文中}希腊文块(简单块)中的字符
大写字母(简单类别)
\p{Sc}货币符号
\P{InGreek}除了希腊文块中的字符以外的所有字符(负数)
[\ p {l} [\ p {lu}]除大写字母(减号)以外的所有字母
7.边界匹配器
在行首,请在正则表达式的开头使用。例如:(abc)表示以ABC开头的字符串。编译时注意设置参数MULTILINE,比如pattern p=pattern.pile (regex,pattern . MULTILINE);
$行的末尾,请在正则表达式的末尾使用它。比如:(bca)。* (abc $)表示以BCA开始、以abc结束的行。
\b单词边界。例如,\b(abc)表示单词的开头或结尾包含abc,(abcjj和jjabc都可以匹配)
\B非单词边界。例如,\B(abc)表示单词中间包含abc,(jjabcjj匹配但jjabcj和abcjj不匹配)
\输入的开始
\G最后一场比赛结束(个人感觉这个参数没用)。例如,\\Gdog的意思是在最后一场比赛结束时寻找dog。如果没有狗,就从头开始找。注意,如果开头不是狗,就无法匹配。
\Z输入的结尾,仅用于最后一个终止符(如果有)
行结束符是一个或两个字符的序列,标记输入字符序列的行结束。
以下代码被视为行终止符:
‐新行(换行)字符( \n ),
‐回车符( \r\n ),后跟一个换行符,
‐单独回车( \r ),
‐下一行字符( \u0085 ),
‐行分隔符( \u2028 )或
‐段落分隔符( \u2029)。
\ z输入结束
编译模式时,可以设置一个或多个标志,例如
模式Pattern=Pattern . compile(Pattern string,Pattern。不区分大小写模式。UNICODE _ CASE);
支持以下六种标志:
‐不区分大小写:匹配字符时与大小写无关。默认情况下,该标志只考虑美国ASCII字符。
‐UNICODE_CASE:与不区分大小写结合使用时,使用UNICODE字母匹配。
‐ Multiline: and $匹配一行的开始和结束,而不是整个输入。
‐UNIX_LINES:在多行模式下匹配and $时,只有 \n 被视为行终止符。
‐DOTALL:当使用此标志时。符号匹配所有字符,包括行结束符。
‐CANON_EQ:考虑Unicode字符的规范等价
8、贪婪量词
x?x,一次或者根本没有。
X* X,零次或多次
x,一次或多次
X{n} X,正好n次。
X{n,} X至少n次
X{n,m} X,至少n次,但不超过m次。
9.相关量词
x?x,一次或者根本没有。
X*?x,零或多次
x?x,一次或多次
X{n}?x,正好n次
X{n,}?x,至少n次
X{n,m}?x,至少n次,但不超过m次
10.所有格量词
x?x,一次或者根本没有。
X* X,零次或多次
x,一次或多次
X{n} X,正好n次。
X{n,} X至少n次
X{n,m} X,至少n次,但不超过m次。
贪婪、不情愿和占有欲的区别在于:(注意,它只限于模糊处理,如。)
灰色量词被认为是“贪婪的”,因为它第一次读取整个模糊匹配字符串。如果第一次匹配尝试(整个输入字符串)失败,匹配器将在匹配字符串的最后一位后退一个字符,然后重试,重复这个过程,直到找到匹配项或没有剩余的字符需要后退。根据表达式中使用的量词,它最后尝试匹配的是1或0个字符。
然而,勉强量词采取相反的方法:它们从匹配字符串的开头开始,然后逐渐一次读取一个字符来搜索匹配。他们最后尝试匹配的是整个输入字符串。
最后,所有格量词总是读取整个输入字符串,并尝试匹配一次(且仅一次)。与贪婪的量词不同,所有格从不后退。
1.逻辑算子
Xy后跟y
XY X或Y
(X) X,作为捕获组。比如,(abc)就是把abc作为一个整体来抓。
12.反向引用
\n任何匹配的第n个捕获组
捕获组可以通过从左到右计算它们的左括号来编号。例如,在表达式((A)(B(C))中,有四个这样的组:
1 ((A)(B(C)))
2 \A
第3条(B)款(C)项
第4条(C)
可以通过表达式中的\n来引用对应的基团,例如,(ab)34\1表示ab34ab,(ab)34(cd)\1\2表示ab34cdabcd。
13.引用
\没有,但是下列字符被引用
\Q什么都不做,但是所有字符都被引用,直到\ e. The之间的字符串将被完整使用(除了1.1中的转义字符)。例如,AB \ \ Q {} \ \ \ E
可以匹配ab{}\\
\E什么也不做,但从\ q结束引用。
14.特殊结构(非捕获)
(?X) X,作为非捕获组。
(?Idmsux-idmsux)什么都没有,但是匹配标志从on改为off。比如:表情(?i)abc(?-i)def此时,(?I)打开不区分大小写开关,abc匹配。
Idmsux解释如下:
‐ I不区分大小写:US-ASCII字符集不区分大小写。(?我)
‐d UNIX_LINES:打开UNIX换行符。
‐m多线:多线模式(?m)
UNIX向下转换行为\n
WINDOWS下载行为\r\n(?s)
‐u UNICODE_CASE: Unicode不区分大小写。(?u)
‐x注释:您可以在模式中使用注释,忽略模式中的空格,并一直使用 # (后面跟注释)。(?x)比如(?X)abc#asfsdadsa可以匹配字符串abc。
(?Idmsux-idmsux:X) X) x,作为具有给定标志on-off的非捕获组。与上面类似,上面的表达式可以改写为:(?I:abc)def,或者(?i)abc(?-i:def)
(?=X) X,通过零宽度的正向前瞻。首先断言零的宽度,只有当子表达式x在这个位置的右侧匹配时,匹配才会继续。比如\w(?=\d)表示字母后跟数字,但不捕获数字(无回溯)
(?X) X,通过零宽度的负前视。零宽度负先行断言。只有子表达式x在这个位置的右边不匹配,匹配才会继续。比如\w(?\d)表示字母后面没有数字,数字不会被捕获。
(?(?(?X) X,作为独立的非捕获组(无回溯)
(?=X)和(?x)的区别在于(?x)它不具有追溯效力。例如,匹配的字符串是abcm
当表达式是一个(?bbc)m可以匹配,当表达式为a(?Bbc),因为当后者匹配B时,由于已经匹配,跳出非捕获组,不再匹配组内字符。它可以加快速度。
更多java知识,请关注java基础课程专栏。以上是java常规知识的详细内容,更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。