#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