因此,我看过几篇文章,内容有些过深,所以我不确定要从它们做的正则表达式语句中删除什么。

我基本上有这个

foo:bar 一直到 anotherfoo:bar; seg98y34g。?sdebvw h segvu (一切正常)

我需要一个PHP正则表达式来删除冒号之后的所有内容。第一部分可以是任何长度(但它绝不包含冒号。因此,在上述两种情况下,我最终都会得到

foo anotherfoo

在做完这样可怕的伪代码示例之后

$string = 'foo:bar';
$newstring = regex_to_remove_everything_after_":"($string);

编辑

发布后,explode()是否足够可靠地工作?就像是
$pieces = explode(':', 'foo:bar')
$newstring = $pieces[0];

最佳答案

explode 可以满足您的要求,但是您可以通过使用 current 使它一步。

$beforeColon = current(explode(':', $string));

我不会在这里使用正则表达式(在幕后进行一些相对简单的操作),也不会将 strpos substr 一起使用(因为这样实际上会遍历字符串两次)。最重要的是,这为读取代码的人提供了立即的提示,“啊,是的,这就是作者正在尝试做的!”而不是“等等,又会发生什么?”

唯一的异常(exception)是,如果您碰巧知道该字符串过长:我不会explode 1 Gb文件。反而:
$beforeColon = substr($string, 0, strpos($string,':'));

我还觉得substr不太容易阅读:在current(explode中,您可以立即看到定界符,而无需额外的函数调用,并且该变量只有一个事件(这使得它不太容易出现人为错误)。基本上,我将current(explode读为“我正在将此字符串之前发生的任何事件的第一个事件”,与substr相对,后者是“我正在从0位置开始并一直持续到该字符串的子字符串”。

关于PHP Regex删除字符后的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12696996/

10-16 23:50
查看更多