如何匹配字符串的通配符?

How to match a wildcard for strings?

请为下面的 Firstjson 列表建议一个通配符

Firstjson = { p10_7_8 , p10_7_2 , p10_7_3 p10_7_4}

我已经为下面的 Secondjson 列表尝试了 p10.7.* 通配符,它​​起作用了。但是当我尝试 p10_7_* 上面的 Firstjson 列表时它不起作用

Secondjson = { p10.7.8 , p10.7.2 , p10.7.3 , p10.7.4 }

您正在尝试使用 通配符 语法,但 Groovy 需要使用 正则表达式 语法进行模式匹配。

您的尝试出了什么问题:

尝试 #1:p10.7.*

.的正则表达式匹配任何单个字符,.*匹配0个或多个字符。这意味着:

p10{exactly one character of any kind here}7{zero or more characters of any kind here}

您没有意识到,您第一次尝试时 . 字符也像 single-character 通配符一样工作。例如,这可能与 p10x7abcdefg 匹配。不过,它也 匹配 p10.7.8。但要小心,它也匹配 p10.78,因为模式末尾的 .* 表达式将愉快地匹配任何字符序列,因此接受 p10.7 之后的任何和所有字符。

尝试 #2:p10_7_*

_ 仅匹配文字下划线。但是_*表示匹配零个或多个下划线。它 not 意味着匹配 any 种类的字符。所以 p10_7_* 匹配 p10_7_______ 这样的东西。直译:

p10_7{zero or more underscores here}

你可以做什么:

你可能想要一个像 p10_7_\d+

这样的正则表达式

这将匹配 p10_7_3p10_7_422 之类的内容。它通过匹配文字文本 p10_7_ 后跟一个或多个 数字 来工作,其中数字是 09\d匹配任意数字,+表示匹配一个或多个前面的东西。直译:

p10_7_{one or more digits here}