我一直在尝试不同的表达式来获取单引号内的字符串。到目前为止,我使用的是一个简单的正则表达式:'(.*?)'但是这个方法在字符串中有嵌套引号的特定情况下会失败。示例1:A ="某方法('abc ','de' f','ghi')"匹配组1:abc第2组:第3组:吉任何帮助都将不胜感激。不是很擅长创建正则表达式,但尝试了一些解决方案,目前在StackOverflow。没有工作,因为我的期望。
kcugc4gi1#
如果用单引号引起来的子字符串总是用,分隔或用圆括号括起来,则可以在regex,'.*?'(?=[,\)])中提前查找这两个字符。
,
'.*?'(?=[,\)])
class Main { public static void main(String[] args) { String str = "someMethod('abc','de'f','ghi')"; Matcher matcher = Pattern.compile("'.*?'(?=[,\\)])").matcher(str); while (matcher.find()) System.out.println(matcher.group()); } }
'abc' 'de'f' 'ghi'
hof1towb2#
.*?被称为不情愿的量词它尝试吃你的字符串一个接一个直到它找到一个匹配,但如果你使用.* 这是贪婪的匹配,将吃你的整个字符串,然后下降一个接一个,直到它找到匹配因此正则表达式为:'(.)'或可以使用正则表达式的boundary选项因此它将类似于“(.?)”$查看此链接以获取额外说明https://dev.java/learn/regex/quantifiers/#greedy-reluctant-possessive当然,您可以查看整个教程https://dev.java/learn/regex/你可以在这里试试正则表达式https://regex101.com/确保选择Java风格。
.*?
2条答案
按热度按时间kcugc4gi1#
如果用单引号引起来的子字符串总是用
,
分隔或用圆括号括起来,则可以在regex,'.*?'(?=[,\)])
中提前查找这两个字符。hof1towb2#
.*?
被称为不情愿的量词它尝试吃你的字符串一个接一个直到它找到一个匹配,但如果你使用.* 这是贪婪的匹配,将吃你的整个字符串,然后下降一个接一个,直到它找到匹配因此正则表达式为:'(.)'
或
可以使用正则表达式的boundary选项
因此它将类似于“(.?)”$
查看此链接以获取额外说明https://dev.java/learn/regex/quantifiers/#greedy-reluctant-possessive
当然,您可以查看整个教程https://dev.java/learn/regex/
你可以在这里试试正则表达式https://regex101.com/确保选择Java风格。