因此,我看过几篇文章,内容有些过深,所以我不确定要从它们做的正则表达式语句中删除什么。
我基本上有这个
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/