Схожая, но не та же последовательность строк - PullRequest
3 голосов
/ 18 декабря 2009

Как соответствовать следующей последовательности:

You wound DUMMY TARGET for 100 points of damage

но не:

You wound DUMMY TARGET with SKILL for 100 points of damage

с регулярным выражением:

^You wound ([\\w\\s]+)(?!with) for (\\d+) points of damage

Регулярное выражение выше соответствует обеим строкам, а я ожидаю совпадения только с первой. Есть ли способ заставить эту работу?

Пример кода Java:

import java.util.regex.*;

public class Dummy {

 static Pattern pattern = Pattern.compile("^You wound ([\\w\\s]+)(?!with) for (\\d+) points of damage");
 static Matcher matcher = pattern.matcher("");
 static String FIRST_SEQUENCE =  "You wound DUMMY TARGET for 100 points of damage";
 static String SECOND_SEQUENCE =  "You wound DUMMY TARGET with SKILL for 100 points of damage";

 public static void main(String...args) {  
  if (matcher.reset(FIRST_SEQUENCE).matches())
   System.out.println("First match. Ok!");

  if (matcher.reset(SECOND_SEQUENCE).matches())
   System.out.println("Second match. Wrong!");
 }
}

Ответы [ 3 ]

3 голосов
/ 18 декабря 2009

Попробуйте с не жадным оператором +? , ([\\w\\s]+?)

^You wound ([\\w\\s]+?)(?!with) for (\\d+) points of damage
0 голосов
/ 18 декабря 2009

Попробуйте это:

"^ Вы ранили [A-Za-z0-9] [^ с помощью] + за [0-9] + пунктов урона"

работал для меня

0 голосов
/ 18 декабря 2009

также, если строка для сопоставления всегда в верхнем регистре, вы можете попробовать:

^You wound ([A-Z\s]+) for (\d+) points of damage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...