找不到合适的正则表达式

时间:2014-01-05 11:32:03

标签: php regex pcre

我花了最后4个小时试图找出如何编写一些正则表达式,但每次当我认为我得到它时,我的测试失败了...... 任何人都可以帮助我或给我一些线索让我走上正轨吗?我面前有一张备忘单。

我想要以下内容:一个正则表达式,它为每个单词提供了一个字符串?

示例:this is a? example sentence? to test the regex?
我希望asentenceregex作为结果。

我提出的最好的正则表达式是/\w\?/

3 个答案:

答案 0 :(得分:4)

只考虑完全由ASCII字母组成的单词的天真正则表达式可以是

\b[A-Za-z]+(?=\?)

\b word boundary anchor确保整个单词匹配,并且(?=\?) lookahead assertion断言紧接着之后有一个问号,而没有提出这个问题标记比赛的一部分。

答案 1 :(得分:2)

我想说的是,首先,你可以将一个单词定义为\S+(你没有定义一个单词,所以我只是去那个。改成别的东西,比如一个限制性更强的字符类如果你愿意,可能像\w+),甚至可能是\b\S+\b

由此,您需要检查?,这可以通过积极的前瞻(?= ... )来完成。

现在,您可以从(?=\?)开始,但这会在正则表达式中一次检查一个位置,如果?位于单词的开头,则不可行。因此,在找到?(?=.*\?)之前,您还需要允许任意数量的字符(甚至0)。

现在,.*将允许正则表达式跨越单词,这是不理想的,将其替换为\S*

\b(?=\S*\?)\S+

实际上你可以删除最后一个\b,因为一个单词不会超过\S

regex101 demo

答案 2 :(得分:1)

正则表达式如下

 $string = "this is a? example sentence? to test the regex?"; 

 $output_array = array();
 preg_match_all("/\b([a-zA-Z]*)\?/", $string, $output_array);

 print_r($output_array[1]);

这将返回所有匹配,但最后没有?