我有一个看起来像这样的正则表达式:
RE regex = new RE("([TtYy\\*])(?:([+-])([\\d]+)([dDmMhH]))?");
应该匹配
*-30m
T-60h
T
Y
等等。
但是星号上的逃脱不起作用。我尝试了一些组合,如单斜线,用括号对该序列进行分组。有人有想法吗?
我正在使用http://code.google.com/p/regexp-me/
中的me.regexp
答案 0 :(得分:0)
在me.regexp.RE.java中有文档评论:
RE接受的完整正则表达式语法如下所述:
人物unicodeChar - 匹配任何相同的unicode字符
\ - 用于引用元字符(如'*')
\\ - 匹配单个'\'字符
\ 0nnn - 匹配给定的八进制字符
\ xhh - 匹配给定的8位十六进制字符
所以单个反斜杠应该在这里工作,或者在lib中存在问题。
<强>更新强> 我试过模式“([TtYy \ *])(?:( [+ - ])([\ d] +)([dDmMhH]))?”和文本“* -30m”,它适用于我在RIM 5.0上的8900模拟器
参见代码:
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);
}
}