Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式捕获“之间的文本”&引用&引用;或''';_Java_Regex - Fatal编程技术网

Java正则表达式捕获“之间的文本”&引用&引用;或''';

Java正则表达式捕获“之间的文本”&引用&引用;或''';,java,regex,Java,Regex,我有一个我正试图用Java正则表达式解析的文档,文档中的文本以引号形式显示为“”,或者“”,因此您有: “布拉,你不是很好!""" 或: “布拉,这不是一个很好的例子” 我一直在尝试使用[“”“|”]([\p{Alnum}\p{Blank}]+)[\“”“|”] 假设: 文本将以“”或“”开头和结尾 文本可以包括数字、字母、空格和标点符号 正文将不包括三个“或三个”的顺序。请尝试以下模式:(“|”) 鉴于: """Hello, World!""" some unquoted text """

我有一个我正试图用Java正则表达式解析的文档,文档中的文本以引号形式显示为“”,或者“”,因此您有:

“布拉,你不是很好!""" 或:

“布拉,这不是一个很好的例子”

我一直在尝试使用
[“”“|”]([\p{Alnum}\p{Blank}]+)[\“”“|”]

假设: 文本将以“”或“”开头和结尾 文本可以包括数字、字母、空格和标点符号 正文将不包括三个“或三个”的顺序。

请尝试以下模式:
(“|”)

鉴于:

"""Hello, World!""" some unquoted text """ lorem ipsum ''" dolor """ some more unquoted text '''single quotes'''
''' Bla, this 1 isn't a great example '''
它将匹配:

  • “你好,世界!”
  • “lorem ipsum”或“dolor”
  • “单引号”
  • ''Bla,这不是一个很好的例子'

  • 你也可能比
    *?
    更具体,但我不确定你所说的“标点符号”是什么意思。

    类似的东西对我来说很有用:

            Pattern p = Pattern.compile("(\"{3}(.*?)\"{3})|('{3}(.*?)'{3})");
            String s1 = "\"\"\" Bla, you're not very nice! \"\"\"";
            String s2 = "''' Bla, this 1 isn't a great example '''";
    
            Matcher m1 = p.matcher(s1);
            Matcher m2 = p.matcher(s2);
    
            if (m1.matches())
            {
                System.out.println(m1.group(2));
            }
    
    
            if (m2.matches())
            {               
                System.out.println(m2.group(4));
            }
    
    但是,只使用2个正则表达式会更简单

    布拉,你不是很好

    布拉,这不是一个很好的例子


    正则表达式的一个问题是,方括号内的任何文本都是或,这意味着管道字符是无用的(作为
    运算符)。您需要将方括号替换为圆括号。

    首先,您需要使用
    (“|””)
    而不是
    [“|”]
    []
    是字符类而不是组。这不符合OPs规范:
    文本正文将不包含三个“或三个”的序列
    确定,因此从第二个示例中去掉“”。。。有什么区别?如果它真的应该匹配不匹配的引号,那么你可以用
    (“''.''”)
    替换
    \1
    ,但我怀疑这是真的。是的,我更改了我的注释,因为这并没有错,只是混淆了示例。公平地说,我更新了示例以包含
    '
    ,以避免混淆。这不是无用的。字符类中的
    |
    将与源文本中的文本
    |
    匹配。另一方面,在类中重复字符肯定是无用的。这是毫无意义的,因为实际的问题是它应该是一个团体。@Veredesmarld:是的,你说得有道理。我对我的答案稍作修改。