当前位置: 首页 > 知识库问答 >
问题:

Regex匹配字符串中单引号或双引号之间的单词

呼延宪
2023-03-14

我正在寻找正确的regex来为我提供以下结果:

    null
Pattern pattern = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");

例子:

  • 福吧
    • 组1:foo
    • 组2:bar
    • 说明:在空格上拆分
    • 组1:foo bar
    • 描述:用双引号包围,所以将foo和bar分组,但不要打印双引号
      null
      null
      null
      null
      null
    • 组1:foo bar
    • 组2:堆栈溢出
    • 组1:foo'bar
    • 组2:堆栈溢出
    • 组3:如何
    • 组4:do
    • 组5:您
    • 组6:do

共有1个答案

谷涵容
2023-03-14

我不确定是否可以在一个matcher.match调用中完成,但可以通过循环完成。
代码段通过反复使用matcher.find()来解决上面提到的所有情况:

Pattern pattern = Pattern.compile("\"([^\"]+)\"|'([^']+)'|\\S+");
List<String> testStrings = Arrays.asList("foo bar", "\"foo bar\"","'foo bar'", "'foo bar", "\"'foo bar\"", "foo bar'", "foo bar\"", "\"foo bar\" \"stack overflow\"", "\"foo' bar\" \"stack overflow\" how do you do");
for (String testString : testStrings) {
    int count = 1;
    Matcher matcher = pattern.matcher(testString);
    System.out.format("* %s%n", testString);
    while (matcher.find()) {
        System.out.format("\t* group%d: %s%n", count++, matcher.group(1) == null ? matcher.group(2) == null ? matcher.group() : matcher.group(2) : matcher.group(1));
    }
}

这将打印:

* foo bar
    * group1: foo
    * group2: bar
* "foo bar"
    * group1: foo bar
* 'foo bar'
    * group1: foo bar
* 'foo bar
    * group1: 'foo
    * group2: bar
* "'foo bar"
    * group1: 'foo bar
* foo bar'
    * group1: foo
    * group2: bar'
* foo bar"
    * group1: foo
    * group2: bar"
* "foo bar" "stack overflow"
    * group1: foo bar
    * group2: stack overflow
* "foo' bar" "stack overflow" how do you do
    * group1: foo' bar
    * group2: stack overflow
    * group3: how
    * group4: do
    * group5: you
    * group6: do
 类似资料:
  • 我有以下字符串。它是度、分、秒格式的LatLongs,可以按如下方式输入:

  • 问题内容: 我知道在PHP中,双引号和单引号之间的唯一区别是字符串中变量的解释和转义符的处理。 在JavaScript中,我经常看到字符串中使用双引号。是否有特定原因,还是单引号与双引号完全相同? 问题答案: 您将希望使用单引号,而您希望双引号出现在字符串内(例如html属性),而不必对其进行转义,反之亦然。除此之外,没有任何区别。 但是,请注意,JSON(JavaScript对象表示法)仅支持双

  • 有没有一种方法使组的“capture”可以在regex后面引用,但其捕获的值不在匹配列表中返回? 或者其他一些方法来解决我(看似简单)的问题。

  • 本文向大家介绍PowerShell中字符串使用单引号和双引号的区别,包括了PowerShell中字符串使用单引号和双引号的区别的使用技巧和注意事项,需要的朋友参考一下 本文介绍PowerShell开发时,在字符串中如何去包含变量。将变量包含在字符串中,最后得到的结果是将变量的值放入到了字符串中。 假如有一个字符串变量:$p = "PowerShell" 那么 $str="Hello $p",这时,

  • 本文向大家介绍简单概括PHP的字符串中单引号与双引号的区别,包括了简单概括PHP的字符串中单引号与双引号的区别的使用技巧和注意事项,需要的朋友参考一下 今天有个朋友问起,说下区别,顺便复习下。 单引号与双引号的不同: " "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。 ' '单引号里面的不进行解释,直接输出。  单引号解析的时间比双引号快 。 单引号支持\转义符,双引号支持的转义

  • 我正在编写一个正则表达式来解析包含标记字段的行。标签出现在等号之前,内容出现在等号之后,用单引号或双引号括起来。对于大多数字段,内容都用单引号括起来。如果字段的内容包含单引号,则该字段用双引号括起来。例如: 我的正则表达式有效,除非字段用双引号括起来。 在Debuggex中测试 在Regexr中测试 对于上面示例中标记为a的字段,a=“'D08/APPL'”,a由捕获组1匹配,后面的单引号由捕获组