所以我看到一些文章有点太深,所以我不确定从他们制作的正则表达式语句中删除什么.
我基本上得到了这个
富:酒吧一路anotherfoo:?巴; seg98y34g sdebvw ^ h segvu(任何情况真的)
我需要一个PHP正则表达式来删除冒号后的所有内容.第一部分可以是任何长度(但它从不包含冒号.所以在上述两种情况下我都会结束
foo和anotherfoo
在做了类似psuedo-code这个可怕的例子之后
$string = 'foo:bar';
$newstring = regex_to_remove_everything_after_":"($string);
Run Code Online (Sandbox Code Playgroud)
编辑
发布后,explode()工作能够可靠吗?就像是
$pieces = explode(':', 'foo:bar')
$newstring = $pieces[0];
Run Code Online (Sandbox Code Playgroud)
cwa*_*ole 23
explode会做你想要的,但你可以通过使用一步current.
$beforeColon = current(explode(':', $string));
Run Code Online (Sandbox Code Playgroud)
我不会在这里使用正则表达式(涉及的场景,一个相对简单的动作背后的一些工作),我也不会用strpos与substr(因为这将有效地,是遍历字符串两次).最重要的是,这为立即阅读代码的人提供了"啊,是的,这就是作者想要做的!" 而不是,"等等,又发生了什么?"
唯一的例外是,如果您碰巧知道字符串过长:我不会explode是1 Gb文件.代替:
$beforeColon = substr($string, 0, strpos($string,':'));
Run Code Online (Sandbox Code Playgroud)
我也觉得substr不太容易阅读:current(explode你可以立即看到分隔符,没有额外的函数调用,只有一个变量事件(这使得它不易出现人为错误).基本上我读current(explode作"我正在接受此字符串之前的任何事件的第一个事件",而不是substr"我正在从0位置开始并继续直到此字符串."
你的explode解决方案可以解决问题 如果你真的想出于某种原因使用正则表达式,你可以简单地这样做:
$newstring = preg_replace("/(.*?):(.*)/", "$1", $string);
Run Code Online (Sandbox Code Playgroud)