作为正则表达式的初学者,我相信我即将问一些过于简单但生病的问题无论如何希望它不会打扰你帮助我......
假设我有一个像“你好'cool1'字样的文字!'cool2'” 我想获得第一个引用的文本(没有',
的'cool1')我的模式应该是什么?当使用匹配器时,我如何保证它仍然是第一个引用而不是第二个?
(请建议仅使用正则表达式解决方案..)
答案 0 :(得分:7)
使用此正则表达式:
'([^']*)'
使用方法如下:(ideone)
Pattern pattern = Pattern.compile("'([^']*)'");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
如果您知道引用的字符串中没有换行字符,那么这就是
'(.*?)'
使用匹配器时,我如何保证它仍然是第一个引用而不是第二个?
首先会找到第一个引用的字符串,因为它从左到右开始搜索。如果您要求它进行下一场比赛,它将为您提供第二个引用的字符串。
答案 1 :(得分:1)
如果你想在没有'
的情况下找到第一个引用的文本,你可以/应该使用Lookahead和Lookbehind机制,如
(?<=').*?(?=')
例如
System.out.println("hello 'cool1' word! 'cool2'".replaceFirst("(?<=').*?(?=')", "ABC"));
//out -> hello 'ABC' word! 'cool2'
答案 2 :(得分:0)
您可以将字符串拆分为引号并获取第二部分(将在第一个和第二个引号之间)。
如果你坚持正则表达式,试试这个:
/^.*?'(.*?)'/
确保将其设置为多行,除非您知道输入中永远不会有换行符。然后,从结果中获取子模式,这将是您的字符串。
也支持双引号:
/^.*?(['"])(.*?)\1/
然后得到子模式2.