Java: Что не так с этим регулярным выражением? - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь получить текст внутри тега, т.е. <text>. Я делаю:

Pattern pattern = Pattern.compile("(?<=\\<).*(?=\\>)");

Я думаю, что это говорит: любой символ 0 или более раз, который прежде, является < (положительный взгляд сзади) и сопровождается > (положительный взгляд вперед).

Matcher m = pattern.matcher(data);  
if (!m.matches()) continue; //Called in a for loop  

Но нет совпадения, например, для ввода <text> some other stuff here.

Что я здесь не так делаю?

Ответы [ 4 ]

5 голосов
/ 02 февраля 2012

Когда вы используете matches(), вся входная строка должна соответствовать выражению.Если вы хотите найти подстроки, вы можете использовать find().

5 голосов
/ 02 февраля 2012

Не используйте m.matches(), но m.find().

Из JavaDoc в matches():

Пытается сопоставить весь регион с шаблоном.

1 голос
/ 02 февраля 2012

Вы можете попробовать это, чтобы соответствовать:

public static void main(String[] args) {
    String input = "<text> Some Value </text> <a>  <testTag>";
    Pattern p = Pattern.compile("<(\\w.*?)>");
    Matcher m = p.matcher(input);

    while(m.find()){
       System.out.println(m.group(1));
    }
}
0 голосов
/ 02 февраля 2012

Я не совсем понимаю ваше регулярное выражение, но это работает для меня:

String text = "<text>";
Pattern p = Pattern.compile(".*<(.*)>.*");
Matcher m = p.matcher(text);
System.out.println(m.matches());
System.out.println(m.group(1));

это отображает:

true
text

Это то, что тебе нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...