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”是完全匹配的?
【问题讨论】:
r
与regex
s 没有任何关系。它只是简化了模式的字符串声明。
下面已经有了很好的答案,但只是为了澄清一下:对于你最后一个问题的答案是 否,我将解释为 没有 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是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章