Java regex content between single quotes

后端 未结 5 1393
臣服心动
臣服心动 2020-12-09 10:37

I am trying to write a regex in Java to find the content between single quotes. Can one please help me with this? I tried the following but it doesn\'t work in some cases:

相关标签:
5条回答
  • 2020-12-09 10:59

    Try this simple regex pattern:

    '([^\s']+)'
    

    and a test code:

    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
    }
    
    0 讨论(0)
  • 2020-12-09 11:00

    Just don't let ' ' appear in the output. Use this regex:

    '([^' ]*)'

    Or make sure the quote pair is wrapped by spaces.

    (?:^| )'([^']*)'(?: |$)
    0 讨论(0)
  • 2020-12-09 11:03

    This should do the trick:

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

    Example: http://www.regex101.com/r/hG5eE1

    In 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");
                }
            } 
        }
    }
    
    0 讨论(0)
  • 2020-12-09 11:10

    If you don't allow the single quote character, ', or the space character, ' ', to be in the pattern, then you're good to go. I used + because I assumed you don't want an empty entry (if not, change it back to an *):

    Pattern p = Pattern.compile("'([^' ]+)'");
    
    0 讨论(0)
  • 2020-12-09 11:21

    Try the next:

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

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

    0 讨论(0)
提交回复
热议问题