RegExp-如何返回单行答案而不是多行答案


RegExp - How to return a single row of answers instead of multiple rows of answers

我有一个RegExp

/h.*e.*l.*l.*o.*/i

我有一段正在运行。

Hey look at that lion!

结果是:

answer[0] = Hey look at that lion!
answer[1] = H
answer[2] = e
answer[3] = l
answer[4] = l
answer[5] = o

我想知道我是否能得到这样的结果:

answer[0] = Hey look at that lion!
answer[1] = Hello

通过更改我的RegExp。也许使用分组或其他方式?如果这个问题的答案是否定的,那么我还有什么选择?我真的不想把答案循环起来,也不想把它串在一起,但如果这是唯一的方法,我想我会这样做的。

您的表达式很好。你只需要执行一次,然后返回一个匹配项。那很好。

请查看此处以供参考:http://regex101.com/r/jU3zU2

如果您愿意的话,您可以像我在示例中那样使用backreferences来获取整个数据。

但是,您希望返回"hello",这是正则表达式中的内容。。。所以呃。。什么

使用正则表达式是不可能的。使用正则表达式时不可更改的规则之一是,每个字符只能匹配一次。这意味着你不能返回整句其中的某些部分。

示例:

"abc".match(/a|b|c|(abc)/g)

最后一个abc组虽然会匹配,但永远不会匹配,因为abc的字符与a|b|c 的早期表达式匹配

我不知道你想通过在regexp中对结果进行硬编码来实现什么,我认为你的真实代码应该做其他事情。如果没有,只需将"hello"赋给一个变量即可。

array_shift($answer);
$answer = implode('',$answer);

array_shift将从结果数组中删除包含整个字符串的元素,然后内爆将它们全部聚集在一个字符串中。