Запрос регулярного выражения

#java #regex

#java #регулярное выражение

Вопрос:

Вот мой текст в качестве записи :

 This is An Image File [LoadImage:'image1.jpg']
this is Another Image [LoadImage:'image2.jpg']
 

Мне нужно получить [LoadImage:'*'] начальную и конечную позиции в виде массива в Java

Комментарии:

1. Если вам нужны позиции, вам даже не нужно регулярное выражение здесь .. подойдет простая строка#indexOf() ..

2. Что вы подразумеваете под позицией (позициями) ? Кроме того, вы можете добавить образец ожидаемого массива.

3. int[] arr = new int[]{str.indexOf('['),str.indexOf(']')} должно сделать. docs.oracle.com/javase/7/docs/api/java/lang /…

4. на самом деле indexOf возвращает индекс каждого [ ] , но мне нужно обработать его, только если это похоже [LoadImage:'*'] `

Ответ №1:

 /* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String s = "This is An Image File [LoadImage:'image1.jpg'] this is Another Image [LoadImage:'image2.jpg']";

        Pattern p = Pattern.compile("\[LoadImage:(.*?)\]");
        Matcher m = p.matcher(s);

        while(m.find()) {
            System.out.println(m.group(1));
        }
    }
}
 

выходной сигнал

‘image1.jpg ‘

‘image2.jpg ‘

Комментарии:

1. регулярное выражение не работает, просто протестируйте его, пожалуйста, вывод такой found: : 22 - 95=> [LoadImage:'image1.jpg'] , this is Another Image [LoadImage:'image2.jpg']

Ответ №2:

Это то, что вы ищете? Если да, то используйте функцию группировки регулярных выражений, которая группируется с помощью круглых скобок () , и получите ее с помощью Matcher#group() метода.

Пример кода:

 String[] array = new String[] { "This is An Image File [LoadImage:'image1.jpg']",
        "this is Another Image [LoadImage:'image2.jpg']" };

Pattern p = Pattern.compile("(\[LoadImage:.*?\])");
for (String s : array) {
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println(s   " : found:"   m.group(1)   " : start:"   m.start()
                  " : end:"   m.end());
    }
}
 

вывод:

 This is An Image File [LoadImage:'image1.jpg'] : found:[LoadImage:'image1.jpg'] : start:22 : end:46
this is Another Image [LoadImage:'image2.jpg'] : found:[LoadImage:'image2.jpg'] : start:22 : end:46
 

Комментарии:

1. Можете ли вы сказать мне, чего вы хотите достичь?

2. Согласно вашему вопросу, который вы ищете [LoadImage:'*'] ? Если нет, то задайте вопрос, прежде чем принять его? Мне никогда не нравится НЕ принимать ответ. Не торопитесь, сначала протестируйте его, а затем примите любой ответ. Вы знаете, что в регулярном выражении было только одно изменение, которое вы хотите сгруппировать с помощью круглых скобок, скопированных кем-то другим. Пожалуйста, прочитайте первую строку моего сообщения еще раз, что может помочь вам понять, как работает группировка регулярных выражений?

Ответ №3:

Нишант уже дал вам ответ, но если вы боитесь [] внутреннего апострофа, используйте:

 int[] arr = new int[]{str.indexOf('['), str.lastIndexOf(']')}
 

Ответ №4:

Ваше регулярное выражение: .*[(.*)] в группе 1 — это то, что вы ищете. Взгляните сюда: http://fiddle.re/x9egb