正则表达式打印出里面的所有比赛?和,或)

时间:2016-05-19 02:47:47

标签: java regex

我有一个以2d数组保存的字符串集合。 该字符串具有horn-clause的形状,完整的一个字符串可以是患者(?x)以及hasdoctor(?x,?y)的形式

如果我写了?x = alex和?y = john,那么上面的字符串采用

的结构

患者(亚历克斯) hasdoctor(亚历克斯,约翰)

现在问题是什么时候使用下面的代码找到?x,但是在hasdoctor(?x,?y)中它跳过了?y。

void find_var(String[][] temp)
{
    System.out.println(temp.length);
    System.out.println(temp[0].length);
    for(int i=0;i<temp.length;i++)
        for(int j=1;j<temp[0].length-1;j++)
        {
           String text_to_parse=temp[i][j];
           Pattern y = Pattern.compile("[?]\\w[,)]");
           Matcher z= y.matcher(text_to_parse);
           if(z.find())
           {
               System.out.println("Found at::"+temp[i][j]);
               System.out.println(z.group());

           }
           else
           {
               System.out.println("Not found at::"+temp[i][j]);
           }
}}

pesudo代码我可以在java中解释我想要的

if([?]\\w[,) is found in array[][])
  if([?]\\w[,) is already in other_array[]
    Then skip;
  else
    save [?]\\w[,) to other_array[]

1 个答案:

答案 0 :(得分:0)

不能说我完全理解你想要实现的目标,但我认为问题在于你正在使用

if (z.find()) { /* ... */ }

而不是

while (z.find()) { /* ... */ }

使用if,字符串不会被完全消耗,并且会在找到第一个匹配项后返回。