2010-11-16 1 views
28

Я хочу захватить индекс определенного регулярного выражения в Java String. Эта строка может быть заключена в одинарные или двойные кавычки (иногда без кавычек). Как я могу захватить этот индекс с помощью Java?Может ли Java String.indexOf() обрабатывать регулярное выражение как параметр?

например:

capture String --> class = ('|"|)word('|"|) 

ответ

33

Нет.

Check source code for verification

Обход: Это не стандартная практика, но вы можете получить в результате использования этого.

Update:

CharSequence inputStr = "abcabcab283c"; 
    String patternStr = "[1-9]{3}"; 
    Pattern pattern = Pattern.compile(patternStr); 
    Matcher matcher = pattern.matcher(inputStr); 
    if(matcher.find()){ 

    System.out.println(matcher.start());//this will give you index 
    } 

ИЛИ

Regex r = new Regex("YOURREGEX"); 

// search for a match within a string 
r.search("YOUR STRING YOUR STRING"); 

if(r.didMatch()){ 
// Prints "true" -- r.didMatch() is a boolean function 
// that tells us whether the last search was successful 
// in finding a pattern. 
// r.left() returns left String , string before the matched pattern 
int index = r.left().length(); 
} 
+0

Есть ли обходной путь для реализации этого? – Roshan

+0

@ org.life.java - Какую библиотеку вы используете здесь? Regex отсутствует в стандартных java-библиотеках. –

+0

@ Stephen C Спасибо, я последовал за этим по адресу http://www.javaregex.com/ Я не уверен, что это надежный lib или нет. Я лично не использовал его, узнал из его учебника –

27

Это двухступенчатый подход. Сначала найдите соответствие для вашего шаблона, затем (второе) используйте Matcher#start, чтобы получить позицию соответствующей строки в контенте String.

Pattern p = Pattern.compile(myMagicPattern); // insert your pattern here 
Matcher m = p.matcher(contentString); 
if (m.find()) { 
    int position = m.start(); 
} 
Смежные вопросы