1

目前我在 RFT(Rational Functional Tester)中的 java 代码


请参阅Class RegularExpression并在此页面上搜索文本“RegularExpression”以使用 RegularExpression。


好像

RegularExpression RegExp = new RegularExpression("eduId="+edu_id, false);
to = find(atDescendant(".documentName",RegExp));

现在我需要添加另一个正则表达式

RegularExpression RegExp2 = new RegularExpression("some_text", false);

然后我需要使用AND组合这两个正则表达式

就像是RegularExpression RegExp_final = RegExp && RegExp2;

所以我可以在 find 命令中使用最后一个。to = find(atDescendant(".documentName",RegExp_final));

有人可以帮我语法,如何写下来?

有时我需要使用一个或另一个正则表达式,有时需要同时使用它们。

4

4 回答 4

3

只需搜索两个正则表达式。通常没有一个好的方法来指定一个正则表达式,它是两个正则表达式的 AND,因为......你可以同时运行这两个!(你可以尝试一些带有lookbehinds、lookaheads和concatenation的东西,但它会变得混乱)

如果该方法只允许您通过一个正则表达式,请编写一个允许您通过两个的正则表达式。或者收藏!或者一个可以决定它是否喜欢的回调 - 那么你甚至可能不需要在其中使用正则表达式!

于 2013-02-06T05:18:35.807 回答
2

如果您有两个有效的正则表达式字符串"A""B",我认为您可以轻松获得的最接近的是这个正则表达式字符串(引号不是正则表达式的一部分):

"A.*B|B.*A"

如果 A 或 B 可能包含|,那么您可能必须使用这样的非捕获组(未经测试):

"(?:A).*(?:B)|(?:B).*(?:A)"

一些Java代码:

Pattern regexpAnd(Pattern a, Pattern b) {
    return Pattern.compile(
         "(?:" + a.pattern() + ").*(?:" + b.pattern() + ")|"
       + "(?:" + b.pattern() + ").*(?:" + a.pattern() + ")" );
}

至少对于任何高级语言标准正则表达式库,就是这样。如果你想要更多,挖掘出正则表达式库源(或编写你自己的......)并添加一种方法来组合已编译正则表达式的解析/匹配树......然后从结果树中生成新的正则表达式字符串。但简而言之:不值得。

于 2013-02-06T05:29:12.993 回答
1

我需要在查找命令中使用 RegExp - find(atDescendant(".documentName",RegExp)

我们使用以下代码来解决此问题:

TestObject[] results = find(atDescendant(".documentName",RegExp)
if (results.length == 0)
    results = find(atDescendant(".documentName",RegExp2)

一定要把最常见的情况放在最前面,这样你就可以正确地走捷径了。


我刚刚注意到你还说:

我需要 RegExp 和 RegExp2 的结果都为真

在这种情况下,您想遍历上面的结果数组,将每个匹配项与第二个正则表达式进行比较:

TestObject[] results = find(atDescendant(".documentName",RegExp)
ArrayList<TestObject> potentials = new ArrayList<TestObject>;
for(TestObject candidate : results) {
    if (Regexp2.matches(candidate.getProperty(".documentName")))
       potentials.add(candidate);
}
于 2013-02-06T20:10:18.247 回答
1

用于|加入多个正则表达式..

所以它会像

"eduId="+edu_id+"some_text"+"|"+"eduId="+edu_id+"|"+"some_text"
--------------------------  ---                 ---
         |->AND              |->OR               |->OR

例如在下面的正则表达式中

a|b|c|abc

a 或 b 或 c 或 abc( AND) 将被匹配

于 2013-02-06T04:57:06.677 回答