从字符串匹配不区分大小写的短语

时间:2013-11-08 06:08:28

标签: java regex string

我的工作是遍历一棵树并在目标词周围添加html标签,并带有以下约束:

  

可标记词是一系列不是其中一部分的字母   另一个词,可能有以下标点之一   最后一个字符:句号'。',逗号',',问号'?',感叹号   点'!',冒号':'和分号';'。

     

请注意,可标记的单词可能嵌入在更长的部分中   文本(例如在“快速棕狐”中标记“快速”),并且可以   在包含文本中多次出现。

     

另一个例子,如果你被要求在“牛”周围添加一个粗体标签,   你会标记整个单词,以及最后一个字符标点符号,   在下列情况下:“牛”,“牛!”,“牛?”,“牛。”,“牛;”,“牛:”,   “COW”,“cOw”。那就是你会有“牛”,“牛!”,“牛?”,“牛。”,   “牛:”,“牛;”,“COW”,“cOw”(最后两个不区分大小写   匹配)。

     

但是你不会用这些词来标记“牛”:“奶牛”,“cowabunga”(in   这两种情况,不是一个字,而是一个更大的词的一部分),“?奶牛”,   (不只是字母,标点符号不是最后一个字符)“牛?!!”,(只有一个   最后的标点字符是可以接受的),“牛的”(撇号   不是一封信。)

遍历树是没有问题的,但是我在设置一个块时遇到问题,该块将决定添加标签的正确位置:

private void inorderAdd(TagNode root, String tag){
      if (root == null){
          return;
      }

      //Test if the tag is in the string at all
      if(root.tag.contains(tag)){
          String text = root.tag;
          String[] pieces =  text.split(" ");

          //check each array item for the target sequence
          for(int i = 0; i < pieces.length-1; i++){ 
              if(pieces[i].contains(tag)){

              }
          }
      }

      inorderAdd(root.firstChild, tag);
      inorderAdd(root.sibling, tag);

}

此时我有一个我知道的短语包含分割成一个数组的标签,每个单词都是分开的。我不知道从哪里开始,因为我需要在某个时候考虑案例,并且还要有一些标点字符。

1 个答案:

答案 0 :(得分:0)

你应该看看Pattern

类似的东西:

Pattern reg = Pattern.compile( "\\b(" + tag + "[!.:?]?)\\b", Pattern. CASE_INSENSITIVE)

然后你应该能够检查这样的情况:

Matcher m = reg.matcher(text)
    ...
if (m.matches()) //true if found a match

m.start(1) / m.end(1) //get the exact location of matched word