Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何编码”;regexp1和regexp2“;作为正则表达式?_Java_Regex_Rft - Fatal编程技术网

Java “如何编码”;regexp1和regexp2“;作为正则表达式?

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

目前我在RFT(RationalFunctionalTester)中的java代码


要使用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将同时包含text
eduId=123
和text
一些内容ext
嗯?这看起来不像java代码或正则表达式代码。你想要什么“AND”要执行的操作?在文档中查找满足这两个表达式的行?查找一段同时匹配这两个表达式的文本?有点含糊不清…您介意澄清一下吗?您能举个例子吗?@asah,@Naveed有关
RegularExp的更多信息,请参阅我问题顶部的链接