- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java 正则表达式基础,实例学习资料收集大全由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
对于JAVA的Pattern类 和 Matcher类可参考网址 http://www.ibm.com/developerworks/cn/java/l-regp/part2/ 。
正则表达式中的特殊字符: \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字等价于[0-9] \D 非数字等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S 非空白符号 [^\t\n\x0B\f\r] \w 单独字符 [a-zA-Z_0-9] \W 非单独字符 [^a-zA-Z_0-9] \f 换页符 \e Escape \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 .为限制一个任意字符 java.. 条件限制为java后除换行外任意两个字符加入特定限制条件 [a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符 [0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 [0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集) []中加入^后加再次限制条件 [^a-z] 条件限制在非小写a to z范围中一个字符 [^A-Z] 条件限制在非大写A to Z范围中一个字符 [^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 [^0-9] 条件限制在非小写0 to 9范围中一个字符 [^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 [^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集) 。
在限制条件为特定字符出现0次以上时,可以使用「*」 J* 0个以上J .* 0个以上任意字符 J.*D J与D之间0个以上任意字符 。
在限制条件为特定字符出现1次以上时,可以使用「+」 J+ 1个以上J .+ 1个以上任意字符 J.+D J与D之间1个以上任意字符 。
在限制条件为特定字符出现有0或1次以上时,可以使用「?」 JA? J或者JA 。
出现限制为连续出现指定次数字符「{a}」 J{2} JJ J{3} JJJ 。
文字a个以上,并且「{a,}」 J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存) 。
文字a个以上,b个以下「{a,b}」 J{3,5} JJJ或JJJJ或JJJJJ 两者取一「|」 J|A J或A Java|Hello Java或Hello 。
「()」中规定一个组合类型比如,我查询<a href=\"index.html\">index</a>中<a href></a>间的数据,可写作<a.*href=\".*\">(.+?)</a> 。
。
在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:
Pattern Pattern.compile(String regex, int flag) flag的取值范围如下:
Pattern.CANON_EQ 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规范相等性(canonical equivalence)".
Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹配,只要将UNICODE_CASE与这个标志合起来就行了.
Pattern.COMMENTS(?x) 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式.
Pattern.DOTALL(?s) 在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符.
Pattern.MULTILINE (?m) 在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束.
Pattern.UNICODE_CASE (?u) 在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集.
Pattern.UNIX_LINES(?d) 在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。抛开空泛的概念,下面写出几个简单的Java正则用例:
◆在字符串包含验证时 //查找以Java开头,任意结尾的字符串 Pattern pattern = Pattern.compile("^Java.*"); Matcher matcher = pattern.matcher("Java不是人"); boolean b = matcher.matches(); //当条件满足时,将返回true,否则返回false System.out.println(b),
正则表达式中的特殊字符:
\\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字等价于[0-9] \D 非数字等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S 非空白符号 [^\t\n\x0B\f\r] \w 单独字符 [a-zA-Z_0-9] \W 非单独字符 [^a-zA-Z_0-9] \f 换页符 \e Escape \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 .为限制一个任意字符 java.. 条件限制为java后除换行外任意两个字符加入特定限制条件 [a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符 [0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 [0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集) []中加入^后加再次限制条件 [^a-z] 条件限制在非小写a to z范围中一个字符 [^A-Z] 条件限制在非大写A to Z范围中一个字符 [^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 [^0-9] 条件限制在非小写0 to 9范围中一个字符 [^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 [^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集) 。
在限制条件为特定字符出现0次以上时,可以使用「*」 J* 0个以上J .* 0个以上任意字符 J.*D J与D之间0个以上任意字符 。
在限制条件为特定字符出现1次以上时,可以使用「+」 J+ 1个以上J .+ 1个以上任意字符 J.+D J与D之间1个以上任意字符 。
在限制条件为特定字符出现有0或1次以上时,可以使用「?」 JA? J或者JA 。
出现限制为连续出现指定次数字符「{a}」 J{2} JJ J{3} JJJ 。
文字a个以上,并且「{a,}」 J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存) 。
文字a个以上,b个以下「{a,b}」 J{3,5} JJJ或JJJJ或JJJJJ 两者取一「|」 J|A J或A Java|Hello Java或Hello 。
「()」中规定一个组合类型比如,我查询<a href=\"index.html\">index</a>中<a href></a>间的数据,可写作<a.*href=\".*\">(.+?)</a> 。
在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数: Pattern Pattern.compile(String regex, int flag) flag的取值范围如下: Pattern.CANON_EQ 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规范相等性(canonical equivalence)"。 Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹配,只要将UNICODE_CASE与这个标志合起来就行了。 Pattern.COMMENTS(?x) 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的"\\s",而是指表达式里的空格,tab,回车之类)。注释从#开始,一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。 Pattern.DOTALL(?s) 在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符。 Pattern.MULTILINE (?m) 在这种模式下,'^'和'$'分别匹配一行的开始和结束。此外,'^'仍然匹配字符串的开始,'$'也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。 Pattern.UNICODE_CASE (?u) 在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配。默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集。 Pattern.UNIX_LINES(?d) 在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。抛开空泛的概念,下面写出几个简单的Java正则用例:
在字符串包含验证时 。
1
2
3
4
5
|
//查找以Java开头,任意结尾的字符串
Pattern pattern = Pattern.compile(
"^Java.*"
);
Matcher matcher = pattern.matcher(
"Java不是人"
);
boolean
b = matcher.matches();
//当条件满足时,将返回true,否则返回false
System.out.println(b);
|
以多条件分割字符串时 。
1
2
3
4
5
|
Pattern pattern = Pattern.compile(
"[, |]+"
);
String[] strs = pattern.split(
"Java Hello World Java,Hello,,World|Sun"
);
for
(
int
i=
0
;i<strs.length;i++) {
System.out.println(strs[i]);
}
|
文字替换(首次出现字符) 。
1
2
3
|
Pattern pattern = Pattern.compile(
"正则表达式"
);
Matcher matcher = pattern.matcher(
"正则表达式 Hello World,正则表达式 Hello World"
);
//替换第一个符合正则的数据
System.out.println(matcher.replaceFirst(
"Java"
));
|
文字替换(全部) 。
1
2
3
|
Pattern pattern = Pattern.compile(
"正则表达式"
);
Matcher matcher = pattern.matcher(
"正则表达式 Hello World,正则表达式 Hello World"
);
//替换第全部符合正则的数据
System.out.println(matcher.replaceAll(
"Java"
));
|
文字替换(置换字符) 。
1
2
3
4
5
6
7
8
|
Pattern pattern = Pattern.compile(
"正则表达式"
);
Matcher matcher = pattern.matcher(
"正则表达式 Hello World,正则表达式 Hello World "
);
StringBuffer sbr =
new
StringBuffer();
while
(matcher.find()) {
matcher.appendReplacement(sbr,
"Java"
);
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
|
验证是否为邮箱地址 。
1
2
3
4
|
String str=
"ceponline@yahoo.com.cn"
;
Pattern pattern = Pattern.compile(
"[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+"
,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
|
去除html标记 。
1
2
3
4
|
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<
a
href=\"index.html\">主页</
a
>");
String string = matcher.replaceAll("");
System.out.println(string);
|
查找html中对应条件字符串 。
1
2
3
4
5
|
Pattern pattern = Pattern.compile(
"href=\"(.+?)\""
);
Matcher matcher = pattern.matcher(
"<a href=\"index.html\">主页</a>"
);
if
(matcher.find()) {
System.out.println(matcher.group(
1
));
}
|
截取http://地址//截取url 。
1
2
3
4
5
6
7
8
|
Pattern pattern = Pattern.compile(
"(http://|https://){1}[\\w\\.\\-/:]+"
);
Matcher matcher = pattern.matcher(
"dsdsds<http://dsds//gfgffdfd>fdf"
);
StringBuffer buffer =
new
StringBuffer();
while
(matcher.find()){
buffer.append(matcher.group());
buffer.append(
"\r\n"
);
System.out.println(buffer.toString());
}
|
替换指定{}中文字 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
String str =
"Java目前的发展史是由{0}年-{1}年"
;
String[][] object={
new
String[]{
"\\{0\\}"
,
"1995"
},
new
String[]{
"\\{1\\}"
,
"2007"
}};
System.out.println(replace(str,object));
public
static
String replace(
final
String sourceString,Object[] object) {
String temp=sourceString;
for
(
int
i=
0
;i<object.length;i++) {
String[] result = (String[]) object[i];
Pattern pattern = Pattern.compile(result[
0
]);
Matcher matcher = pattern.matcher(temp);
temp = matcher.replaceAll(result[
1
]);
}
return
temp;
}
|
以正则条件查询指定目录下文件 //用于缓存文件列表 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
private
ArrayList files =
new
ArrayList();
// 用于承载文件路径
private
String _path;
// 用于承载未合并的正则公式
private
String _regexp;
class
MyFileFilter
implements
FileFilter {
/** * 匹配文件名称 */
public
boolean
accept(File file) {
try
{
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return
match.matches();
}
catch
(Exception e) {
return
true
;
}
}
}
/** * 解析输入流 * @param inputs */
FilesAnalyze(String path, String regexp) {
getFileName(path, regexp);
}
/** * 分析文件名并加入files * @param input */
private
void
getFileName(String path, String regexp) {
// 目录
_path = path;
_regexp = regexp;
File directory =
new
File(_path);
File[] filesFile = directory.listFiles(
new
MyFileFilter());
if
(filesFile ==
null
)
return
;
for
(
int
j =
0
; j < filesFile.length; j++) {
files.add(filesFile[j]);
}
return
;
}
/** * 显示输出信息 * @param out */
public
void
print(PrintStream out) {
Iterator elements = files.iterator();
while
(elements.hasNext()) {
File file = (File) elements.next();
out.println(file.getPath());
}
}
public
static
void
output(String path, String regexp) {
FilesAnalyze fileGroup1 =
new
FilesAnalyze(path, regexp);
fileGroup1.print(System.out);
}
public
static
void
main(String[] args) {
output(
"C:\\"
,
"[A-z|.]*"
);
}
|
基本上就这些了,原来的内容确实太烂了,这次更新了一下.
最后此篇关于java 正则表达式基础,实例学习资料收集大全的文章就讲到这里了,如果你想了解更多关于java 正则表达式基础,实例学习资料收集大全的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在用 yacc/bison 编写一个简单的计算器。 表达式的语法看起来有点像这样: expr : NUM | expr '+' expr { $$ = $1 + $3; } | expr '-'
我开始学习 lambda 表达式,并在以下情况下遇到了以下语句: interface MyNumber { double getValue(); } MyNumber number; nu
这两个 Linq 查询有什么区别: var result = ResultLists().Where( c=> c.code == "abc").FirstOrDefault(); // vs. va
如果我们查看 draft C++ standard 5.1.2 Lambda 表达式 段 2 说(强调我的 future ): The evaluation of a lambda-expressio
我使用的是 Mule 4.2.2 运行时、studio 7.5.1 和 Oracle JDK 1.8.0_251。 我在 java 代码中使用 Lambda 表达式,该表达式由 java Invoke
我是 XPath 的新手。我有网页的html源 http://london.craigslist.co.uk/com/1233708939.html 现在我想从上面的页面中提取以下数据 完整日期 电子
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我将如何编写一个 Cron 表达式以在每天上午 8 点和下午 3:30 触发?我了解如何创建每天触发一次的表达式,而不是在多个设定时间触发。提前致谢 最佳答案 你应该只使用两行。 0 8 * * *
这个问题已经有答案了: What do 3 dots next to a parameter type mean in Java? (9 个回答) varargs and the '...' argu
我是 python 新手,在阅读 BeautifulSoup 教程时,我不明白这个表达式“[x for x in titles if x.findChildren()][:-1]”我不明白?你能解释一
(?:) 这是一个有效的 ruby 正则表达式,谁能告诉我它是什么意思? 谢谢 最佳答案 正如其他人所说,它被用作正则表达式的非捕获语法,但是,它也是正则表达式之外的有效 ruby 语法。 在
这个问题在这里已经有了答案: Why does ++[[]][+[]]+[+[]] return the string "10"? (10 个答案) 关闭 8 年前。 谁能帮我处理这个 JavaSc
这个问题在这里已经有了答案: What is the "-->" operator in C++? (29 个答案) Java: Prefix/postfix of increment/decrem
这个问题在这里已经有了答案: List comprehension vs. lambda + filter (16 个答案) 关闭 10 个月前。 我不确定我是否需要 lambda 或其他东西。但是,
C 中的 assert() 函数工作原理对我来说就像一片黑暗的森林。根据这里的答案https://stackoverflow.com/a/1571360 ,您可以使用以下构造将自定义消息输出到您的断言
在this页,John Barnes 写道: If the conditional expression is the argument of a type conversion then effec
我必须创建一个调度程序,它必须每周从第一天上午 9 点到第二天晚上 11 点 59 分运行 2 天(星期四和星期五)。为此,我需要提供一个 cron 表达式。 0-0 0-0 9-23 ? * THU
我正在尝试编写一个 Linq 表达式来检查派生类中的属性,但该列表由来自基类的成员组成。下面的示例代码。以“var list”开头的 Process 方法的第二行无法编译,但我不确定应该使用什么语法来
此 sed 表达式将输入字符串转换为两行输出字符串。两条输出行中的每一行都由输入的子串组成。第一行需要转换成大写: s:random_stuff\(choice1\|choice2\){\([^}]*
我正在使用 Quartz.Net 在我的应用程序中安排我的工作。我只是想知道是否可以为以下场景构建 CRON 表达式: Every second between 2:15AM and 5:20AM 最
我是一名优秀的程序员,十分优秀!