我试图在
Java中编写一个正则表达式来查找单引号之间的内容.有人可以帮我吗我试过以下,但在某些情况下不起作用:
Pattern p = Pattern.compile("'([^']*)'");
>测试案例:’Tumblr’是一个惊人的应用程序预期输出:Tumblr
>测试案例:Tumblr是一个惊人的“应用程序”预期的输出:应用程序
>测试案例:Tumblr是一个“惊人的”应用程序预期输出:惊人
>测试案例:Tumblr是“真棒”和“惊人”预期的输出:真棒,惊人
>测试用例:Tumblr的用户感到失望预期输出:NONE
>测试案例:Tumblr的“收购”完成,但用户的忠诚度怀疑预期产出:收购
我很感谢任何帮助.
谢谢.
解决方法
这应该是诀窍:
(?:^|\s)'([^']*?)'(?:$|\s)
示例:http://www.regex101.com/r/hG5eE1
import java.util.*; import java.lang.*; import java.util.regex.*; class Main { static final String[] testcases = new String[] { "'Tumblr' is an amazing app","Tumblr is an amazing 'app'","Tumblr is an 'amazing' app","Tumblr is 'awesome' and 'amazing' ","Tumblr's users' are disappointed ","Tumblr's 'acquisition' complete but users' loyalty doubtful" }; public static void main (String[] args) throws java.lang.Exception { Pattern p = Pattern.compile("(?:^|\\s)'([^']*?)'(?:$|\\s)",Pattern.MULTILINE); for (String arg : testcases) { System.out.print("Input: "+arg+" -> Matches: "); Matcher m = p.matcher(arg); if (m.find()) { System.out.print(m.group()); while (m.find()) System.out.print(","+m.group()); System.out.println(); } else { System.out.println("NONE"); } } } }