单引号之间的Java正则表达式内容

我正在尝试用Java编写一个正则表达式来查找单引号之间的内容。 能帮我一个忙吗? 我尝试了以下但在某些情况下它不起作用:

Pattern p = Pattern.compile("'([^']*)'"); 
  1. 测试案例: ‘Tumblr’是一个了不起的应用预期输出: Tumblr

  2. 测试案例: Tumblr是一个惊人的“应用程序” 预期输出:应用程序

  3. 测试案例: Tumblr是一个“惊人的”应用程序预期输出:惊人的

  4. 测试案例: Tumblr’很棒’和’惊人’ 预期输出:真棒,令人惊叹

  5. 测试案例: Tumblr的用户感到失望预期输出:

  6. 测试案例: Tumblr的“收购”完成但用户的忠诚度令人怀疑预期产出:收购

我很感激任何帮助。

谢谢。

这应该是诀窍:

 (?:^|\s)'([^']*?)'(?:$|\s) 

示例: http : //www.regex101.com/r/hG5eE1

在Java(ideone)中 :

 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"); } } } } 

如果你不允许单引号字符' ,或空格字符' '在模式中,那么你就可以了。 我使用了+因为我假设你不想要一个空条目(如果没有,把它改回一个* ):

 Pattern p = Pattern.compile("'([^' ]+)'"); 

尝试下一个:

 '\w+'|'\w+(\s\w+)*' 

https://github.com/paul-vargas/java-regex-ui

试试这个简单的正则表达式模式:

 '([^\s']+)' 

和测试代码:

 try { Pattern regex = Pattern.compile("'([^\\s']+)'"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { for (int i = 1; i <= regexMatcher.groupCount(); i++) { // matched text: regexMatcher.group(i) // match start: regexMatcher.start(i) // match end: regexMatcher.end(i) } } } catch (PatternSyntaxException ex) { // Syntax error in the regular expression } 

只是不要让' '出现在输出中。 使用这个正则表达式:

  '([^'] *)' 

或者确保引号对用空格包装。

  (?:^ |)'([^'] *)'(?:| $)