Java 正则表达式匹配三个前导和结尾单引号

Java 正则表达式匹配三个前导和结尾单引号,java,regex,Java,Regex,我在获取下面的java正则表达式的正确语法时遇到问题。我只想搜索一个字符串,看看它是否包含一个以三个单引号开始并以三个单引号结束的文本块,但它的前面和后面可以有其他文本。三个单引号之间可以存在任何UTF-8字符。知道我哪里出错了吗 String value="'''<html><head><title>Hello World</title></head><body><div>text</

我在获取下面的java正则表达式的正确语法时遇到问题。我只想搜索一个字符串,看看它是否包含一个以三个单引号开始并以三个单引号结束的文本块,但它的前面和后面可以有其他文本。三个单引号之间可以存在任何UTF-8字符。知道我哪里出错了吗

          String value="'''<html><head><title>Hello World</title></head><body><div>text</div></body></html>'''";
          Pattern p = Pattern.compile("'''[\\w*]'''");
          Matcher m = p.matcher(value);
          if(m.find()){
              System.out.println("''' found");
          }else{
              System.out.println("''' not found");
          }
尝试使用此正则表达式:

Pattern p = Pattern.compile("'{3}.*'{3}$");
尝试使用此正则表达式:

Pattern p = Pattern.compile("'{3}.*'{3}$");
使用:

*表示任意字符多次可选

{3}表示3个单引号

*表示任意字符多次可选

{3}表示3个单引号

$表示字符串的结尾使用:

*表示任意字符多次可选

{3}表示3个单引号

*表示任意字符多次可选

{3}表示3个单引号

$表示字符串的结尾

知道我哪里出错了吗

          String value="'''<html><head><title>Hello World</title></head><body><div>text</div></body></html>'''";
          Pattern p = Pattern.compile("'''[\\w*]'''");
          Matcher m = p.matcher(value);
          if(m.find()){
              System.out.println("''' found");
          }else{
              System.out.println("''' not found");
          }
正则表达式有两个问题:

您试图将*量词放在字符类内,而它应该放在外部。 您正在尝试使用word character\w预定义字符类来匹配字符,例如,/而它将只匹配[a-zA-Z_0-9]。如果要匹配任何字符,请使用。任何字符 将正则表达式更改为模式p=Pattern.compile'.*';应该使问题中提供的代码起作用

其他答案中建议的模式也将提供解决方案

知道我哪里出错了吗

          String value="'''<html><head><title>Hello World</title></head><body><div>text</div></body></html>'''";
          Pattern p = Pattern.compile("'''[\\w*]'''");
          Matcher m = p.matcher(value);
          if(m.find()){
              System.out.println("''' found");
          }else{
              System.out.println("''' not found");
          }
正则表达式有两个问题:

您试图将*量词放在字符类内,而它应该放在外部。 您正在尝试使用word character\w预定义字符类来匹配字符,例如,/而它将只匹配[a-zA-Z_0-9]。如果要匹配任何字符,请使用。任何字符 将正则表达式更改为模式p=Pattern.compile'.*';应该使问题中提供的代码起作用


其他答案中建议的模式也将提供解决方案。

我怀疑您希望捕获单引号之间的字符串数据。 在这种情况下,您使用了错误的括号[],而不是。此外,我想您应该使用\w*来允许所有可能的内容。但是,\w代表单词字符,通常只包括[A-Za-z0-9],这意味着它不包括html字符

澄清:诸如\w之类的速记字符类不应出现在[]括号内\w*与[A-Za-z0-9_307;]*相同,这也表明星号量词*位于字符类之后,而不是字符类内部


正则表达式的一种可用形式是Pattern.compile“\\w*”;。但是,这不包括html字符,例如,我怀疑您希望捕获单引号之间的字符串数据。 在这种情况下,您使用了错误的括号[],而不是。此外,我想您应该使用\w*来允许所有可能的内容。但是,\w代表单词字符,通常只包括[A-Za-z0-9],这意味着它不包括html字符

澄清:诸如\w之类的速记字符类不应出现在[]括号内\w*与[A-Za-z0-9_307;]*相同,这也表明星号量词*位于字符类之后,而不是字符类内部


正则表达式的一种可用形式是Pattern.compile“\\w*”;。但是,这不包括html字符,例如不需要前导“^”。在本例中,字符串以三个引号开头,但问题中没有说明:包含三个单引号,以三个单引号结尾quotes@rmuller所以从技术上讲,前3个单引号是可选的,因为字符串需要同时包含三个单引号end@KevinBowersox-字符串在三个单引号前后可以有其他文本。@c12字符串必须总共包含6个单引号,在字符串中的某个位置包含3个单引号,在末尾包含3个单引号吗?或者结尾的三个单引号可以满足您的条件吗?@KevinBowersox-更正它必须在某处包含3个引号,并在结尾包含3个引号。这是一个更好的例子String test=这是我的“……”字符串,这里有一些结束文本;该字符串也可以以“开头,以”结尾,而不包含任何其他文本。因此,我猜不需要一个正则表达式,它搜索三个“中间有文本”,然后再搜索三个“前导”。在本例中,字符串以三个引号开头,但问题中没有说明:包含三个单引号,以三个单引号结尾quotes@rmuller所以从技术上讲,前3个单引号是可选的,因为字符串需要同时包含三个单引号end@KevinBowersox-字符串在三个单引号前后可以有其他文本。@c12 Bust字符串必须包含
总共有6个单引号,3个在字符串的某个地方,3个在末尾?或者结尾的三个单引号可以满足您的条件吗?@KevinBowersox-更正它必须在某处包含3个引号,并在结尾包含3个引号。这是一个更好的例子String test=这是我的“……”字符串,这里有一些结束文本;该字符串也可以以“开头,以”结尾,而不包含任何其他文本。所以我猜一个正则表达式搜索三个“文本介于三个以上”