java中pattern是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中pattern是啥意思?相关的知识,希望对你有一定的参考价值。

java 中pattern为正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。例子如下:


Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
boolean b = Pattern.matches("a*b", "aaaaab");
参考技术A 正则表达式的编译表示形式。

参考资料:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html

参考技术B pattern代表模式,看你要问什么了
1、 从基础上说,Pattern是java正则表达式的入口,基本上正则表达式都需要走Pattern类
2、 从架构上说,pattern表示的是一种设计模式(design pattern),学习设计模式是一个菜鸟程序员到正式程序员必经的一步,设计模式的种类很多,也很有意思,比如广播模式,工厂模式,迭代器,适配器等都是比较常见的设计模式
参考技术C private boolean isPhoneNumberValid(String phoneNumber)
// TODO Auto-generated method stub
boolean isValid = false;
String expression = "^\\(?(\\d3)\\)?[- ]?(\\d3)[- ]?(\\d5)$";
String expression2 = "^\\(?(\\d3)\\)?[- ]?(\\d4)[- ]?(\\d4)$";
CharSequence inputstr = phoneNumber;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputstr);

Pattern pattern2 = Pattern.compile(expression2);
Matcher matcher2 = pattern.matcher(inputstr);
if(matcher.matches() || matcher2.matches())
isValid = true;

return isValid;

用于编译
参考技术D 表达式

pythons re.compile(r' pattern flags') 中的“r”是啥意思?

【中文标题】pythons re.compile(r\' pattern flags\') 中的“r”是啥意思?【英文标题】:What does the "r" in pythons re.compile(r' pattern flags') mean?pythons re.compile(r' pattern flags') 中的“r”是什么意思? 【发布时间】:2014-02-01 23:27:15 【问题描述】:

我正在阅读http://docs.python.org/2/library/re.html。据此,pythons re.compile(r' pattern flags') 中的“r”指的是原始字符串表示法:

解决方案是使用 Python 的原始字符串表示法 表达模式;反斜杠不以任何特殊方式处理 以 'r' 为前缀的字符串文字。所以 r"\n" 是一个两个字符的字符串 包含'\'和'n',而“\n”是一个字符的字符串 包含换行符。通常模式将用 Python 表示 使用此原始字符串表示法的代码。

这样说是否公平:

re.compile(r pattern) 表示“pattern”是正则表达式,而 re.compile(pattern) 表示“pattern”是完全匹配的?

【问题讨论】:

rregexs 没有任何关系。它只是简化了模式的字符串声明。 下面已经有了很好的答案,但只是为了澄清一下:对于你最后一个问题的答案是 ,我将解释为 没有 re.compile @ 表示完全匹配? 【参考方案1】:

正如@PauloBu 所说,r 字符串前缀与正则表达式没有特别的关系,而是与 Python 中的字符串相关。

普通字符串使用反斜杠字符作为特殊字符(如换行符)的转义字符:

>>> print('this is \n a test')
this is 
 a test

r 前缀告诉解释器不要这样做:

>>> print(r'this is \n a test')
this is \n a test
>>> 

这在正则表达式中很重要,因为您需要反斜杠才能将其完整地传递给 re 模块 - 特别是,\b 专门匹配单词开头和结尾的空字符串。 re 需要字符串 \b,但是正常的字符串解释 '\b' 被转换为 ASCII 退格字符,因此您需要显式转义反斜杠 ('\\b'),或者告诉 python 它是原始字符串 (@ 987654332@).

>>> import re
>>> re.findall('\b', 'test') # the backslash gets consumed by the python string interpreter
[]
>>> re.findall('\\b', 'test') # backslash is explicitly escaped and is passed through to re module
['', '']
>>> re.findall(r'\b', 'test') # often this syntax is easier
['', '']

【讨论】:

\b 是退格键。 \a 是铃铛。 @user2357112 谢谢,我总是把它弄混 - 我会修复帖子 我喜欢你用一个例子来说明你的观点。【参考方案2】:

不,因为粘贴的文档解释了字符串的 r 前缀表示该字符串是 raw string.

由于 Python 转义字符和正则表达式转义之间存在冲突,两者都使用反斜杠 \ 字符,因此原始字符串提供了一种向 Python 指示您想要非转义字符串的方法。

检查以下内容:

>>> "\n"
'\n'
>>> r"\n"
'\\n'
>>> print "\n"


>>> print r"\n"
\n

r 为前缀仅表示反斜杠\ 应按字面意思处理,而不是python 的转义字符。

这很有帮助,例如当您在单词边界上进行搜索时。正则表达式是\b,但是要在Python 字符串中捕获它,我需要使用"\\b" 作为模式。相反,我可以使用原始字符串:r"\b" 进行模式匹配。

当试图在正则表达式中查找文字反斜杠时,这变得特别方便。为了匹配正则表达式中的反斜杠,我需要使用模式\\,要在python中转义它意味着我需要转义每个斜杠并且模式变为"\\\\",或者更简单的r"\\" .

正如您可以在更长和更复杂的正则表达式中猜到的那样,额外的斜杠会让人感到困惑,因此通常认为原始字符串是可行的方法。

【讨论】:

谢谢 - 非常有帮助 更好的答案,因为它实际上解释了 什么 r 代表 ;)【参考方案3】:

没有。并非正则表达式语法中的所有内容都需要以\ 开头,因此.*+ 等在模式中仍然具有特殊含义

r'' 通常用于方便正则表达式,确实需要大量 \,因为它可以防止将 \ 加倍的混乱

【讨论】:

以上是关于java中pattern是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

java 正则表达式 ^java 是啥意思

pythons re.compile(r' pattern flags') 中的“r”是啥意思?

Java Pattern的用法是啥?

Java Pattern的用法是啥

java正则pattern的正确用法怎么用

Java EE中web.xml常见url pattern="/**",两个星号啥意思?