【发布时间】:2013-07-27 12:33:46
【问题描述】:
我有一个这样的字符串:
String str = "Friday 1st August 2013"
我需要检查:如果字符串包含“任意数字”后跟“st”字符串,则打印“yes”,否则打印“no”。
我试过了:if ( str.matches(".*\\dst") ) 和 if ( str.matches(".*\\d.st") ),但它不起作用。
有什么帮助吗?
【问题讨论】:
我有一个这样的字符串:
String str = "Friday 1st August 2013"
我需要检查:如果字符串包含“任意数字”后跟“st”字符串,则打印“yes”,否则打印“no”。
我试过了:if ( str.matches(".*\\dst") ) 和 if ( str.matches(".*\\d.st") ),但它不起作用。
有什么帮助吗?
【问题讨论】:
用途:
if ( str.matches(".*\\dst.*") )
String#matches() 匹配从字符串开头到结尾的正则表达式模式。锚点 ^ 和 $ 是隐含的。所以,你应该使用匹配完整字符串的模式。
或者,使用Pattern、Matcher 和Matcher#find() 方法在字符串中的任意位置搜索特定模式:
Matcher matcher = Pattern.compile("\\dst").matcher(str);
if (matcher.find()) {
// ok
}
【讨论】:
正则表达式可以用来匹配这样的模式。例如
String str = "Friday 1st August 2013"
Pattern pattern = Pattern.compile("[0-9]+st");
Matcher matcher = pattern.matcher(str);
if(mathcer.find())
//yes
else
//no
【讨论】:
你可以使用这个正则表达式:
.*?(\\d+)st.*
* 之后的? 是必要的,因为* 是“贪婪的”(它将匹配整个字符串)。 *? 进行“非贪婪”匹配。此外,该数字可以有多个数字(例如“15st”)。
【讨论】: