Java “如何编码”;regexp1和regexp2“;作为正则表达式?
目前我在RFT(RationalFunctionalTester)中的java代码Java “如何编码”;regexp1和regexp2“;作为正则表达式?,java,regex,rft,Java,Regex,Rft,目前我在RFT(RationalFunctionalTester)中的java代码 要使用RegularExpression,请参阅并搜索上的文本“RegularExpression” 看起来像 RegularExpression RegExp = new RegularExpression("eduId="+edu_id, false); to = find(atDescendant(".documentName",RegExp)); 现在我需要添加另一个正则表达式 RegularExp
要使用RegularExpression,请参阅并搜索上的文本“RegularExpression”
看起来像
RegularExpression RegExp = new RegularExpression("eduId="+edu_id, false);
to = find(atDescendant(".documentName",RegExp));
现在我需要添加另一个正则表达式
RegularExpression RegExp2 = new RegularExpression("some_text", false);
然后我需要使用和组合这两个正则表达式
类似于正则表达式RegExp\u final=RegExp&&RegExp2代码>
所以我可以在find命令中使用最后一个to=find(atsubstant(“.documentName”,RegExp_final))代码>
有人能帮我解释一下语法吗,怎么写下来
有时我需要使用一个或另一个正则表达式,有时两者一起使用 使用|
连接多个正则表达式
那就好像
"eduId="+edu_id+"some_text"+"|"+"eduId="+edu_id+"|"+"some_text"
-------------------------- --- ---
|->AND |->OR |->OR
例如,在下面的正则表达式中
a|b|c|abc
a或b或c或abc(和
)将被匹配使用|
连接多个正则表达式
那就好像
"eduId="+edu_id+"some_text"+"|"+"eduId="+edu_id+"|"+"some_text"
-------------------------- --- ---
|->AND |->OR |->OR
例如,在下面的正则表达式中
a|b|c|abc
a或b或c或abc(和
)将匹配只需搜索两个正则表达式。一般来说,没有一个好方法可以指定一个正则表达式,它是两个正则表达式的AND,因为。。。你可以两个都跑!(您可以尝试使用lookbehinds、lookaheads和连接,但会变得很混乱)
如果该方法只允许您传递一个正则表达式,那么编写一个可以传递两个正则表达式的正则表达式。或是收藏!或者是一个回调函数,它可以决定是否匹配,然后你甚至不需要在它里面使用正则表达式 只需搜索两个正则表达式。一般来说,没有一个好方法可以指定一个正则表达式,它是两个正则表达式的AND,因为。。。你可以两个都跑!(您可以尝试使用lookbehinds、lookaheads和连接,但会变得很混乱)
如果该方法只允许您传递一个正则表达式,那么编写一个可以传递两个正则表达式的正则表达式。或是收藏!或者是一个回调函数,它可以决定是否匹配,然后你甚至不需要在它里面使用正则表达式 如果您有两个有效的regexp字符串“A”
和“B”
,我认为最接近的是这个regexp字符串(引号不是regexp的一部分):
如果A或B可能包含|
,则您可能必须使用以下非捕获组(未测试):
一些Java代码:
Pattern regexpAnd(Pattern a, Pattern b) {
return Pattern.compile(
"(?:" + a.pattern() + ").*(?:" + b.pattern() + ")|"
+ "(?:" + b.pattern() + ").*(?:" + a.pattern() + ")" );
}
至少对于任何高级语言标准regexp库来说,就是这样。如果您想要更多,请挖掘regexp库源代码(或编写自己的…),并添加一种方法来组合已编译regexp的解析/匹配树。。。然后从结果树生成新的regexp字符串。但简而言之:不值得。如果您有两个有效的regexp字符串“A”
和“B”
,我认为最接近的是这个regexp字符串(引号不是regexp的一部分):
如果A或B可能包含|
,则您可能必须使用以下非捕获组(未测试):
一些Java代码:
Pattern regexpAnd(Pattern a, Pattern b) {
return Pattern.compile(
"(?:" + a.pattern() + ").*(?:" + b.pattern() + ")|"
+ "(?:" + b.pattern() + ").*(?:" + a.pattern() + ")" );
}
至少对于任何高级语言标准regexp库来说,就是这样。如果您想要更多,请挖掘regexp库源代码(或编写自己的…),并添加一种方法来组合已编译regexp的解析/匹配树。。。然后从结果树生成新的regexp字符串。但简而言之:不值得
我需要在find命令中使用RegExp-
查找(AtDegenant(“.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);
}
TestObject[]results=find(atsubstant(“.documentName”,RegExp)
ArrayList电位=新的ArrayList;
for(TestObject候选对象:结果){
if(Regexp2.matches(candidate.getProperty(“.documentName”)))
添加(候选人);
}
我需要在find命令中使用RegExp-
查找(AtDegenant(“.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);
}
TestObject[]results=find(atsubstant(“.documentName”,RegExp)
ArrayList电位=新的ArrayList;
for(TestObject候选对象:结果){
if(Regexp2.matches(candidate.getProperty(“.documentName”)))
添加(候选人);
}
嗯?这看起来不像java代码或正则表达式代码。你想要什么“AND”要执行的操作?在文档中查找符合这两个表达式的行?查找一段匹配这两个表达式的文本?它有点模糊…您介意澄清一下吗?您能举个例子吗?@asah,@Naveed请查看我问题顶部的链接,以了解有关RegularExpression
的更多信息,我认为这在一般情况下是不可能的,但是我不能给出两个无法组合的RegExp的具体例子,所以我可能是错的。你能在RegExp上设置额外的约束吗?比如说,没有重叠的匹配,那么就很容易了。@Floris:我需要RegExp和RegExp2的结果都是真的。这意味着documentName将同时包含texteduId=123
和text一些内容ext
嗯?这看起来不像java代码或正则表达式代码。你想要什么“AND”要执行的操作?在文档中查找满足这两个表达式的行?查找一段同时匹配这两个表达式的文本?有点含糊不清…您介意澄清一下吗?您能举个例子吗?@asah,@Naveed有关RegularExp的更多信息,请参阅我问题顶部的链接