正则表达式
正则表达式
正则表达式在搜索,替换,检查和解析字符串方面有着高效且简洁的优点
基本概念和用法
- 普通字符
普通字符就是普通字符,例如,正则表达式abc会匹配包含“abc”的字符串
- 特殊字符(元字符)
.
(点):匹配任意单个字符(除了换行符)。^
(脱字符号):匹配输入字符串的开始位置。$
(美元符号):匹配输入字符串的结束位置。[]
(方括号):匹配方括号内的任意字符(字符集)。|
(竖线):匹配两项之间的任意一项(或)。\
(反斜杠):转义特殊字符或表示特殊序列。
- 字符类
[abc]
:匹配任何一个字符a、b或c。[^abc]
:匹配除了a、b、c之外的任何字符。[a-z]
:匹配任何一个小写字母。[A-Z]
:匹配任何一个大写字母。[0-9]
:匹配任何一个数字。
- 预定义字符类
\d
:匹配任何一个数字(等同于[0-9]
)。\D
:匹配任何非数字字符(等同于[^0-9]
)。\w
:匹配任何字母数字字符(等同于[a-zA-Z0-9_]
)。\W
:匹配任何非字母数字字符(等同于[^a-zA-Z0-9_]
)。\s
:匹配任何空白字符(空格、制表符、换行符等)。\S
:匹配任何非空白字符。
- 量词
*
:零次或多次。+
:一次或多次。?
:零次或一次。{n}
:确定的n次。{n,}
:至少n次。{n,m}
:最少n次且最多m次。
- 分组和捕获
(...)
:将多个表达式组合成一个子表达式,并捕获匹配的文本。
注意事项:
默认情况下,量词是贪婪的,它们会尽可能多地匹配字符。要使量词非贪婪(即尽可能少地匹配字符),可以在量词后面加上一个问号,例如 *?
、+?
或 {n,}?
。
使用示例
- 查找字符串中的所有数字:
\d+
- 查找字符串中的所有单词:
\w+
- 查找字符串中的所有电子邮件地址:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
- 查找字符串中的所有URL:
(https?://\S+)
具体实现
String.replaceAll(String regex, String replacement)
- 替换所有匹配的子串。
- 示例:
"Hello World!".replaceAll("[aeiou]", "*")
会返回"H*ll* W*rld!"
。
String.replaceFirst(String regex, String replacement)
- 只替换第一次匹配的子串。
- 示例:
"Hello World!".replaceFirst("[aeiou]", "*")
会返回"H*llo World!"
。
String.matches(String regex)
- 检查整个字符串是否匹配正则表达式。
- 示例:
"123".matches("\\d\\d\\d")
返回true
。
String.find(String regex)
- 查找字符串中第一次出现的正则表达式匹配项。
- 示例:
"Hello World".find("[aeiou]")
返回第一个匹配的字符"e"
。
String.split(String regex)
- 根据正则表达式分割字符串。
- 示例:
"one,two,three".split(",")
返回数组["one", "two", "three"]
。
String.contains(String regex)
- 检查字符串是否包含正则表达式匹配的子串。
- 示例:
"Hello World".contains("[aeiou]")
返回true
。
Pattern.compile(String regex)
- 编译正则表达式,返回一个
Pattern
对象。 - 示例:
Pattern.compile("\\d\\d\\d")
编译一个匹配三个数字的正则表达式。
- 编译正则表达式,返回一个
Matcher.find()
- 在
Matcher
对象中查找下一个匹配项。 - 示例:使用
Pattern
和Matcher
来查找和替换文本中的特定模式。
- 在
Matcher.group()
- 返回由
Matcher
对象的最后一次匹配操作所匹配的输入子序列。
- 返回由
后三个方法的例子:
1 | import java.util.regex.Pattern; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Czar!
评论
ValineDisqus