如果空格不包含斜杠,如何在斜杠后面添加空格?

时间:2017-12-03 03:53:38

标签: php regex preg-replace

这是一种找到类似的正则表达式格式的方法吗?

我可能有一个字符串或者可能是一个像

这样的行列表

Human have hands/fingers/feet and so on

如果空格不包含斜杠,我想在斜杠Human have hands/ fingers/ feet and so on

后面添加空格

但是,如果空格包含在字符串后面,我不想添加额外的空间。只想在字符串的其余部分添加空格而没有斜杠后面的空格。

例如hands/fingers/ feethands/ fingers/ feet

5 个答案:

答案 0 :(得分:1)

下面的代码肯定可以正常工作(离线测试):

<?php
$string = "hands/fingers/feet";

$spaceArr = explode("/",$string);
$modify_string = '';
foreach($spaceArr as $val){
    $modify_string .= $val."/ ";    
}

echo $modify_string;
// Output is hands/ fingers/ feet

?>

您可以在手/手指/脚中添加任何空间,但输出将始终像手/手指/脚

答案 1 :(得分:1)

是的,当然还有RegEx这个

$count = null;
$returnValue = preg_replace('/\\/([^ ])/', '/ $1', 'hands/fingers/ feet', -1, $count);

解释

/\/([^ ])/这个正则表达式只匹配/而没有空格,并替换为'/ $ 1'。这里$ 1是/

之后的字符

查看更多:https://en.functions-online.com/preg_replace.html?command={"pattern":"/\/([^ ])/","replacement":"/ $1","subject":"hands/fingers/ feet","limit":-1}

答案 2 :(得分:1)

是的,使用负向前看是最好的方法。

$str = preg_replace('/\/(?!\s)/', '/ ', $str);

你可以看到[这里] [1]

这使用了负向前看。所以它基本上说:

仅当/后面没有空格时才匹配。另外展望不要消耗匹配中的任何字符,因此如果没有预见就不需要替换字母。

特别感谢@ShalithaSuranga发布我原本想到的相同答案,但在我有机会发布之前,因此迫使我做出一些额外的努力来使用前瞻。

我通常不使用它们,因为它们比常规匹配模式更容易混淆。

那就是说,任何一个可能会更快,然后爆炸或其他更冗长的方法。然而,在这种情况下,速度可能不是一个问题,我会说对你来说最有意义,并且你更容易阅读和理解后者。

可读性总是#1,然后是功能,然后是性能。

如果你想要一个简短的非regx答案,你也可以使用它

$str = "hands/fingers/feet";
echo implode("/ ", array_map('trim', explode("/", $str)));

here

对于这个,array_map将函数回调作为第一个参数(可以是一个字符串)并应用它或将其映射到数组中的每个项目。在这种情况下,我们希望trim从字符串的两边删除空格。然后我们将它重新组合在一起。这样就像爆炸one/ two

这样的数组
 [
    'one',
    ' two'
 ]

将修剪空白,然后我们用'/ '和所有设置将其内爆。

答案 3 :(得分:1)

您可以使用此正则表达式执行此操作:

echo preg_replace('@\/(\s)?@', '/ ', "Human have hands/fingers/ feet and so on");

演示:https://regex101.com/r/c67Mh9/1/

PHP示例:

d = {'year': [2001, 2002], 'wsp': [0.51, 0.42]}
df = pd.DataFrame(data=d)
d2 = {'year': [2001, 2002], 'age': [50, 60]}
df2 = pd.DataFrame(data=d2)
join = pd.merge(df, df2, on='year')

答案 4 :(得分:0)

使用explode()或尝试下面的str_replace()示例

请尝试str_replace()

<php
$words = 'hands/fingers/ feet'; /** Your example words **/
$words = str_replace('/', '/ ', $words); /** Replace any slash with a slash AND a space **/
$words = str_replace('/  ', '/ ', $words); /** Replace slash with 2 spaces with slash with 1 space as this is what you need **/

echo $words; /** Output: hands/ fingers/ feet **/
?>

我希望这会带你走向正确的方向。