如何在groovy中为任何字符编写通配符

时间:2017-11-25 12:47:01

标签: regex groovy soapui

我想知道如何在groovy脚本中应用通配符吗?例如,而不是像:

这样的长列表
def name1 = 'name1'
def name2 = 'name2'
def name3 = 'name3'

如果字符串可以是任何一个名字,我会很高兴,所以如果它是1,2或3,我就不会感到烦恼,只要它在名字后面有一个字符即可。那没关系。这意味着我可以有一个变量,如:

def name = 'name' + wildcard

有点像sql,你只想要任何开头的地方,如果你想要为名字这样的东西进行searrch,你会写出喜欢'名称%'。

由于

更新

我有三个变量:

def ns4 = 'ns4:testResponse'
def ns3 = 'ns3:testResponse'
def ns2 = 'ns2:testResponse'

但我想为任何ns测试标记标记设置一个变量,所以我尝试了这个:

def ns = 'ns' +/[\d]+/':testResponse'

但是我得到了一个Script36.groovy:17:期待EOF,发现':testResponse'

我也试过def ns = 'ns' +/[\d]+/+':testResponse'但是当我在ns2和ns之间执行断言时,我得到了这个:

assert ns2 == ns | | | | | ns[\d]+:testResponse | false ns2:testResponse
实际上,我并不想提供多个if语句,如下所示:

if (response.contains(ns2)...
else if (response.contains(ns3)..
else if (response.contains(ns4) etc

我实际上并不担心其中的数字:

def ns4 = 'ns4:testResponse'
def ns3 = 'ns3:testResponse'
def ns2 = 'ns2:testResponse'

所以我想实现一个通配符而不是一个数字,这样我就只能有一个def变量和一个if语句而不是3个def变量和3个if语句。

所以我想改变这个:

    def ns4 = 'ns4:testResponse'
    def ns3 = 'ns3:testResponse'
    def ns2 = 'ns2:testResponse'

...

    if (response.contains(ns2)...
    else if (response.contains(ns3)..
    else if (response.contains(ns4) etc

这样的事情:

def ns = 'ns' +/[\d]+/':testResponse'

...

if (response.contains(ns)

示例回复:

<SOAP-ENV:Body>
      <ns5:testResponse>
      </ns5:testResponse>
   </SOAP-ENV:Body>

因此,在上面的回复中,您可以看到我有一个标记:<ns5:testResponse

但是,根据请求,此标记中的数字可以更改,它可以是:

<ns3:testResponse
<ns4:testResponse
<ns5:testResponse
<ns6:testResponse
<ns7:testResponse

现在,而不是if if语句的if语句包含:<ns3:testResponse<ns4:testResponse或此<ns5:testResponse等,

我只是想确保它包含标记<ns*:testResponse,其中星号是任意数字,因此它可以匹配上面提到的5个标记中的任何一个

1 个答案:

答案 0 :(得分:2)

要识别正则表达式中的数字,请使用\d。如果您期望多个数字,请使用\d+

以下是示例脚本:

def list = ['name1','name2', 'name10a']
def pattern = /name[\d]+/
list.collect { assert it ==~ pattern }

如果查看列表,则最后一个元素与两个数字后的字符的模式不同。

输出:

groovy> def list = ['name1','name2', 'name10a'] 
groovy> def pattern = /name[\d]+/ 
groovy> list.collect { assert it ==~ pattern } 

Exception thrown

Assertion failed: 

assert it ==~ pattern
       |  |   |
       |  |   name[\d]+
       |  false
       name10a

    at ConsoleScript5$_run_closure1.doCall(ConsoleScript5:3)
    at ConsoleScript5.run(ConsoleScript5:3)