开发者

The best way to find out that part of the string is potencial RegEx match

开发者 https://www.devze.com 2023-02-09 10:49 出处:网络
how would you do this: I have a string and some regexes. Then I iterate开发者_JAVA技巧 over the string and in every iteration I need to know if the part (string index 0 to string currently iterated i

how would you do this:

I have a string and some regexes. Then I iterate开发者_JAVA技巧 over the string and in every iteration I need to know if the part (string index 0 to string currently iterated index) of that string is possible full match of one or more given regexes in next iterations.

Thank you for help.


What about a code like this:

// all of *greedy* regexs into a list
List<String> regex = new ArrayList<String>();
// here is my text
String mytext = "...";

String tmp = null;
// iterate over letters of my text
for (int i = 0; i < mytext.length(); i++) {
     // substring from 0. position till i. index
     tmp = mytext.substring(0, i);
     // append regex on sub text
     for (String reg : regex ) {
          Pattern p = Pattern.compile(reg);
          Matcher m = p.matcher(tmp);
          // if found, do smt
          if (m.find() ) { bingo.. do smt! }
     }     
}


You could use Matcher.lookingAt() to try to match as much as possible from a given input, but not requiring the whole input to match (.matches() would require the full input to match and .find() would not require the match to start at the beginning).


I don't believe the Java regular expression API provides such "incremental" or "step-by-step" search.

What you could do however, is to formulate your expression using reluctant quantifiers.

[...] The reluctant quantifiers, however, take the opposite approach: They start at the beginning of the input string, then reluctantly eat one character at a time looking for a match. The last thing they try is the entire input string. [...]


If this isn't viable in your case, you could use the Matcher.setRegion method to incrementally increase the region used by the matcher.


So I've been searching for alternatives to Java's standart RegEx library and found one that does the job well - JRegex

0

精彩评论

暂无评论...
验证码 换一张
取 消