【问题标题】:Java Regular Expression byte by byteJava 正则表达式逐字节
【发布时间】:2018-11-07 05:19:36
【问题描述】:

我正在寻找一种增量应用正则表达式模式的方法,即我正在寻找一个匹配器,我可以在输入字符时对其进行更新,并在每个字符上告诉我它是否仍然匹配。

这是代码中的插图(MagicMatcherIAmLookingFor 是我正在寻找的东西,characterSource 是我可以查询新字符的东西,比如InputStreamReader):

final Pattern pattern = Pattern.compile("[0-9]+");
final MagicMatcherIAmLookingFor incrementalMatcher = pattern.magic();
final StringBuilder stringBuilder = new StringBuilder();
char character;
while (characterSource.isNotEOF()) {
    character = characterSource.getNextCharacter();
    incrementalMatcher.add(character);
    if (incrementalMatcher.matches()) {
        stringBuilder.append(character);
    } else {
        return result(
             stringBuilder.toString(),
             remaining(character, characterSource)
        );
    }
}

我没有找到像那样利用现有java.util.regex.Pattern 的方法,但也许我只是没有找到它。或者是否有提供此类功能的内置正则表达式的替代库?

我没有任何运气在网上搜索它 - 所有的结果都完全淹没在如何使用 java 正则表达式的首位。

我的目标是 Java 8+

【问题讨论】:

  • 感谢审核,已更正。马虎我:-)

标签: java regex online-algorithm


【解决方案1】:

这是您正在寻找的对象吗?

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MagicMatcher {

    private Pattern pattern;
    private Matcher matcher;
    private String stringToCheck;

    public MagicMatcher(Pattern p , String s) {
        pattern = p;
        stringToCheck = s;
        updateMatcher();
    }

    public boolean matches() {
        return matcher.matches();
    }

    private void updateMatcher() {
        matcher = pattern.matcher(stringToCheck);
    }

    public void setStringToCheck(String s) {
        stringToCheck = s;
        updateMatcher();
    }

    public String getStringToCheck() {
        return stringToCheck;
    }

    public void addCharacterToCheck(char c) {
       stringToCheck += c;
       updateMatcher();
    }

    public void addStringToCheck(String s) {
        stringToCheck += s;
        updateMatcher();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 2011-08-18
    • 2011-04-01
    • 2017-12-19
    • 1970-01-01
    • 2016-09-28
    • 2013-01-18
    • 2012-01-16
    相关资源
    最近更新 更多