首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要正则表达式才能匹配字符串中首次出现的字符

需要正则表达式才能匹配字符串中首次出现的字符
EN

Stack Overflow用户
提问于 2018-02-22 13:39:06
回答 4查看 483关注 0票数 1

我有一个字符串形式的sql查询,我需要一个正则表达式来匹配第一个问号(?)在字符串中

代码语言:javascript
复制
select * from something where a = ? and b=? and c=?

正则表达式应该只匹配第一次出现的问号。我将在Neo4j-apoc库(apoc.text.replace function)中使用这个正则表达式。与Perl/Java等不同,这个库不提供任何标志或api来获取第一个匹配。所以我必须完全依赖正则表达式来匹配第一个字符。

我已经尝试了下面的一些正则表达式,但没有成功

这些正则表达式不匹配

代码语言:javascript
复制
(?<=^[^?]{0,1000})[?]

这些正则表达式匹配所有不存在的字符和所有问号

代码语言:javascript
复制
[?]?
([?])?
([\?])?
([\?])??
([?])*?

这些正则表达式匹配所有问号

代码语言:javascript
复制
([?])+?
[?]+?

有人能帮我写这个正则表达式吗?

EN

回答 4

Stack Overflow用户

发布于 2018-02-22 14:42:19

好吧,我想出了一个奇怪的解决方案,但你可以这样做:

(?<!\?)\?{1}(?!.*?\?)|(?<=\?)\?{1}(?!.*?\?)

将仅与的最后一个 ?匹配。

所以,虽然你不能直接找到第一个,但你可以颠倒你的字符串,然后找到最后一个。

我使用Regex101对其进行了测试。

更新

它找出?\n之前出现的最后一个。

票数 1
EN

Stack Overflow用户

发布于 2018-02-22 14:29:02

您可以使用([^?]+)(\?)(.+)

你可以用$2得到第一个问号

Online demo

票数 0
EN

Stack Overflow用户

发布于 2018-02-22 14:42:43

如果您的正则表达式引擎支持positive lookbehind (?<,要仅选择您可以使用的第一个问号:

(?<=where a = )\?或不带where (?<=a = )\?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48920370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档