vip*_*169 104 java regex string
我想检查String是否按顺序包含单词"stores","store"和"product".无论他们之间是什么.
我尝试使用someString.contains(stores%store%product);
也.contains("stores%store%product");
我是否需要明确声明一个正则表达式并将其传递给该方法,否则我根本无法传递正则表达式?
nha*_*tdh 114
String.contains
使用String,句点.它不适用于正则表达式.它将检查指定的确切String是否出现在当前String中.
注意,String.contains
不检查单词边界; 它只是检查子串.
正则表达式更强大String.contains
,因为您可以对关键字(以及其他内容)强制执行单词边界.这意味着您可以将关键字搜索为单词,而不仅仅是子字符串.
使用String.matches
以下正则表达式:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Run Code Online (Sandbox Code Playgroud)
RAW正则表达式(删除字符串文字中的转义 - 这是你打印出上面的字符串时得到的):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Run Code Online (Sandbox Code Playgroud)
在\b
一个字边界检查,这样你就不会得到匹配restores store products
.请注意,stores 3store_product
也被拒绝,因为数字和_
被认为是单词的一部分,但我怀疑这种情况出现在自然文本中.
由于双边都检查了单词边界,因此上面的正则表达式将搜索确切的单词.换句话说,stores stores product
与上面的正则表达式不匹配,因为你正在搜索store
没有的单词s
.
.
通常匹配除了 许多新行字符之外的任何字符.(?s)
在开始时,.
任何角色都会毫无例外地匹配(感谢Tim Pietzcker指出这一点).
eug*_*e82 99
matcher.find()
做你需要的.例:
Pattern.compile("stores.*store.*product").matcher(someString).find();
Run Code Online (Sandbox Code Playgroud)
san*_*3hi 17
您可以简单地使用matches
String类的方法.
boolean result = someString.matches("stores.*store.*product.*");
Run Code Online (Sandbox Code Playgroud)
如果您想检查字符串是否包含子字符串或不使用正则表达式,最接近的方法是使用 find() -
private static final validPattern = "\\bstores\\b.*\\bstore\\b.*\\bproduct\\b"
Pattern pattern = Pattern.compile(validPattern);
Matcher matcher = pattern.matcher(inputString);
System.out.print(matcher.find()); // should print true or false.
Run Code Online (Sandbox Code Playgroud)
请注意 matches() 和 find() 之间的区别,如果整个字符串与给定模式匹配,matches() 返回 true。find() 尝试查找与给定输入字符串中的模式匹配的子字符串。另外,通过使用 find(),您不必在正则表达式模式的开头添加额外的匹配,例如 - (?s).* 和结尾的 .* 。
归档时间: |
|
查看次数: |
215736 次 |
最近记录: |