如何在me.regexp中转义星号

时间:2011-10-18 19:32:14

标签: blackberry

我有一个看起来像这样的正则表达式:

RE regex = new RE("([TtYy\\*])(?:([+-])([\\d]+)([dDmMhH]))?");

应该匹配

*-30m
T-60h
T
Y

等等。

但是星号上的逃脱不起作用。我尝试了一些组合,如单斜线,用括号对该序列进行分组。有人有想法吗?

我正在使用http://code.google.com/p/regexp-me/

中的me.regexp

1 个答案:

答案 0 :(得分:0)

me.regexp.RE.java中有文档评论:

  

RE接受的完整正则表达式语法如下所述:
  人物

     

unicodeChar - 匹配任何相同的unicode字符
   \ - 用于引用元字符(如'*')
  \\ - 匹配单个'\'字符
  \ 0nnn - 匹配给定的八进制字符
  \ xhh - 匹配给定的8位十六进制字符

所以单个反斜杠应该在这里工作,或者在lib中存在问题。

<强>更新 我试过模式“([TtYy \ *])(?:( [+ - ])([\ d] +)([dDmMhH]))?”和文本“* -30m”,它适用于我在RIM 5.0上的8900模拟器

screen shot with regex-me test application

参见代码:

public final class MyScreen extends MainScreen 
    implements FieldChangeListener {

    static final int INT_MAX_LEN = 200;
    static final String STR_PATTERN = "Pattern:";
    static final String STR_TEXT = "Text:";
    static final String STR_RESULT = "Result:";
    static final String STR_RUN_TEST = "Run test";
    static final String STR_DEFAULT_PATTERN = 
        "([TtYy\\*])(?:([+-])([\\d]+)([dDmMhH]))?";
    static final String STR_DEFAULT_TEXT = "*-30m";

    EditField mPattern = new EditField(STR_PATTERN, STR_DEFAULT_PATTERN,
            INT_MAX_LEN, Field.USE_ALL_WIDTH);
    EditField mText = new EditField(STR_TEXT, STR_DEFAULT_TEXT, INT_MAX_LEN,
            Field.USE_ALL_WIDTH);
    LabelField mResult = new LabelField(STR_RESULT, Field.USE_ALL_WIDTH);
    ButtonField mBtnRunTest = 
        new ButtonField(STR_RUN_TEST, Field.USE_ALL_WIDTH 
            | ButtonField.CONSUME_CLICK);

    public MyScreen() {
        add(mPattern);
        add(mText);
        add(mResult);
        add(mBtnRunTest);
        mBtnRunTest.setChangeListener(this);
    }

    public void fieldChanged(Field field, int context) {
        if (field == mBtnRunTest) {
            runTest();
        }
    }

    private void runTest() {
        RE regex = new RE(mPattern.getText());
        String result = regex.match(mText.getText()) ? "TRUE" : "FALSE";
        mResult.setText(STR_RESULT + result);
    }
}