没有找到答案,但这是我的情况:QueryBuilders.regexpQuery("regexExpression","\\-?*[0-9]3475[0-9]6")
;QueryBuilders.simpleQueryStringQuery("\\-?*2347566);
我运行的两个查询和simplequery都返回2347566(带或不带“-”),但正则表达式查询不返回任何内容。我为regex查询打印出的值是-?[0-9]3475[0-9]6正确。
有人知道为什么会这样吗?我也把旗设为“全部”。
为了澄清,我有一个电话号码的数据库,可以有+,#作为前缀,用户可以输入这些字符, 和数字在搜索领域。搜索应该忽略搜索中所有+,#的示例,这样如果我在数据库中有+123,123搜索将返回该结果,或者+123也应该返回相同的结果,因为我将+视为通配符,所以出现0或1次。
例如,+123 * 45 * 应该返回123[0-9]45[0-9],有或没有+(或其他出现)。
我试过使用正则表达式搜索纯粹的 * 像234**789,当我知道有很多电话号码,可以找到,如果我使用完全匹配,如23456789或23477789。但是当我只在 * 或[0-9]上使用正则表达式搜索时,即使正则表达式搜索的值是234[0-9][0 -9]789,它也不会返回任何结果。
2条答案
按热度按时间ssm49v7z1#
最后,我使用了错误的字段进行查询,我认为是在那里。不得不在所有领域搜索才能得到一些结果。
h7appiyu2#
Wikipedia中有很多关于正则表达式语法的文档。
你的图案有几处错误。
首先,只有当连字符在一个 * 字符类 * 中,并且不是第一个或唯一的字符,或者出现在最后一个范围之后时,才需要转义连字符。
因此,它试图匹配以 ** 字符开头的值。
在正则表达式语法中,* 字符是一个量词,而不是大多数Unix语法将其识别为通配符。
你要找的元字符是点字符,dots.php
尝试以下模式,看看结果是否有所改善。
此外,您可以选择使用 \d 语法来表示 [0-9]。
最后一点,你提到
这不就意味着模式应该是