我有一个字符串形式的sql查询,我需要一个正则表达式来匹配第一个问号(?)在字符串中
select * from something where a = ? and b=? and c=?正则表达式应该只匹配第一次出现的问号。我将在Neo4j-apoc库(apoc.text.replace function)中使用这个正则表达式。与Perl/Java等不同,这个库不提供任何标志或api来获取第一个匹配。所以我必须完全依赖正则表达式来匹配第一个字符。
我已经尝试了下面的一些正则表达式,但没有成功
这些正则表达式不匹配
(?<=^[^?]{0,1000})[?]这些正则表达式匹配所有不存在的字符和所有问号
[?]?
([?])?
([\?])?
([\?])??
([?])*?这些正则表达式匹配所有问号
([?])+?
[?]+?有人能帮我写这个正则表达式吗?
发布于 2018-02-22 14:42:19
好吧,我想出了一个奇怪的解决方案,但你可以这样做:
(?<!\?)\?{1}(?!.*?\?)|(?<=\?)\?{1}(?!.*?\?)
将仅与的最后一个 ?匹配。
所以,虽然你不能直接找到第一个,但你可以颠倒你的字符串,然后找到最后一个。
我使用Regex101对其进行了测试。
更新
它找出?在\n之前出现的最后一个。
发布于 2018-02-22 14:29:02
发布于 2018-02-22 14:42:43
如果您的正则表达式引擎支持positive lookbehind (?<,要仅选择您可以使用的第一个问号:
(?<=where a = )\?或不带where (?<=a = )\?
https://stackoverflow.com/questions/48920370
复制相似问题