正则表达式匹配问号后的所有内容?

198

我在Yahoo Pipes中有一个源,想要匹配问号后面的所有内容。

到目前为止,我已经想出了如何使用以下方法匹配问号:

\?

现在只需要匹配问号后面的所有内容。


8
\?.* 匹配问号后面的所有内容(包括空字符串)。 - khachik
1
你使用的编程语言是什么? - Mark Byers
2
对于使用Java的人来说,它是"\\?" - CodyBugstein
7个回答

363
\?(.*)
你想要第一个捕获组的内容。

7
@Dreamonic 不认为这会发生 :( - Starkers
7
你说得对。这不太可能发生。Mark自2011年2月5日10:41以来就没有上线过了。但指出每一个变化仍然是很有意义的,也许有人会从Dreamonic的指出中学到一些东西。 - DutGRIFF
2
你如何捕获最后一个问号后面的内容?我想从那里开始“锚定” - 我不确定“锚定”是否是正确的词。 - BenKoshy
2
你好,来自未来的十年:)。这个答案匹配了问号后面的所有内容,但包括问号。如何从匹配中去掉问号? - Matthew Wolman
3
@Matthew,尝试使用(?<=\?) .*,这将仅匹配?之后的所有内容。 - user391
显示剩余2条评论

107

试试这个:

\?(.*)

圆括号是捕获组,您可以使用它来提取您感兴趣的字符串部分。

如果字符串可能包含换行符,则可能需要使用“点全部”修改符以允许点匹配换行符。是否需要这样做以及如何执行此操作取决于您正在使用的编程语言。看起来您忘记在问题中提到您使用的编程语言。

如果您的语言支持固定宽度后顾断言,则可以使用另一种替代方法:

(?<=\?).*

哦,固定宽度?我能否使用后顾查找来实现这样的功能?主题:代码,编程,设计所以我想选择冒号,并向后查找到主题中的大写T,然后向前到该行的结尾?(在这种情况下,行的结尾是“设计”)。 - Mark
@马克:你在使用什么编程语言? - Mark Byers
我正在使用支持正则表达式的Yahoo Pipes。我已经得到了这个问题的答案,现在正在寻找一个可以选择冒号后面6个字符以及所有(全部)向前字符的正则表达式。 - Mark
@Mark:我看了你的问题列表,但是没有看到你的新问题。你确定已经发布了吗? - Mark Byers
我会在几分钟后再次提出这个新问题。最好将我的问题分开,并且真的应该同时问两个问题。谢谢。 - Mark

59

使用正向后行断言技术:

(?<=\?).*

(这里我们正在搜索一个以问号为前缀的文本)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

示例

基本上,?<= 是一个组构造,在进行任何匹配之前需要转义问号。

它们的性能非常好,但并非所有实现都支持它们。


不在Safari上工作 - Pouya Jabbarisani
这是问题的解决方案。要求在“?”之后漂亮地输出。谢谢! - Johannes Knust

20
\?(.*)$

如果您想匹配问号后面的所有字符,可以使用一个组来匹配任何字符,并最好使用"$"符号来表示行结束。


2
在大多数正则表达式实现中,默认情况下,“.”不匹配换行符。因此,即使在表达式中没有行结束符,它也会匹配到行尾。 - Mark Byers

11

使用这个方法,您可以获取所有内容,甚至包括换行符。


如果你不在意换行,从这个模式中删除 \n。 - undefined

2

请查看这个网站:http://rubular.com/。该网站允许您输入一些示例文本(您在网站上要查找的内容),然后随着您构建正则表达式,它将实时突出显示匹配的内容。


谢谢您,您知道如何匹配冒号吗?以及在冒号之前的特定字符数量? - Mark
/([a-zA-Z]{4}):/ 将匹配 Test: Welcome 并获取 Test - Austin Lin

0

str.replace(/^.+?\"|^.|\".+/, '');

这段代码与选择要删除的内容有关,但在两个引号之间的内容不能使用超过两次。它所做的就是选择不在引号之间的任何内容,并将其替换为无。

即使对我来说也有点困惑,但我会尝试解释一下。 ^.+?(不是任何东西可选)直到第一个",然后|或/停止(仍在研究它的真正含义)直到/在^.处选择了在第二个"之前没有选择任何内容,使用(| 停止/在)。并选择所有随后出现的内容。


请考虑添加代码描述,以便我们了解它的功能和原因。 - Pika Supports Ukraine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接