7

有没有一种简单的方法可以ltrim()用来删除匹配的单个实例而不是所有匹配?

我正在遍历字符串数组,我想删除第一个,也是唯一一个匹配(在本例中为元音):

ltrim($value, "aeiouyAEIOUY");

使用默认行为,字符串aardvarkorAardvark将被修剪为"rdvark". 我希望结果是"ardvark".

无论如何,我都不受 ltrim 约束,但它似乎是最接近的内置 PHP 函数。它会很好ltrim并且rtrim有一个可选参数“limit”,只是说...... :)

4

6 回答 6

5

只需使用 preg 替换它有一个限制选项

例如

$value = preg_replace('/^[aeiouy]/i', '', $value, 1); 
于 2012-12-28T22:20:03.370 回答
4

正则表达式可能有点矫枉过正,但是:

$value = preg_replace('/^[aeiouy]/i', '', $value);

请注意i使其不区分大小写。

于 2012-12-28T22:19:39.953 回答
1

你不能用ltrim你说的原因来做这个,你也不能用str_replace(也没有限制)。我认为使用正则表达式是最简单的:

$value = preg_replace('/^[aeiouy]/i', '', $value);

但是,如果您真的不想这样做,您可以使用子字符串,但您必须在循环中检查字符串中任何这些字符串的位置,因为没有 php 函数可以进行这样的检查,我了解。

于 2012-12-28T22:18:46.123 回答
1

您可以使用以下preg_replace功能:

<?php
    $value = preg_replace('/^[aeiouy]/i', '', $value);
?>
于 2012-12-28T22:19:00.800 回答
1

有几种方法可以去做你想做的事情。

也许最直接的方法是这样的正则表达式替换:

$pattern = '/^[aeiouy]{1}/i';
$result = preg_replace($pattern, '', $original_string);
于 2012-12-28T22:21:21.977 回答
1

这可能是最有效的方法(所以忽略我的正则表达式答案):

if (strpos('aeiouyAEIOUY', $value[0]) !== false) $value = substr($value, 1);

或者,

if (stripos('aeiouy', $value[0]) !== false) $value = substr($value, 1);
于 2012-12-28T22:25:33.817 回答