使用PHP仅删除特定字符前的第一个单词

使用PHP仅删除特定字符前的第一个单词,php,Php,我的字符串是: your string here, please/do it by yourself. 我想删除斜杠前的单词(带斜杠),并在结尾处得到: your string here, do it by yourself. 我的代码是: $string = 'your string here, please/do it by yourself.'; $parsed = preg_replace("\s*\w+\s+(?:w/)", '', $string); 它什么都不做(甚至不修改就

我的字符串是:

your string here, please/do it by yourself.
我想删除斜杠前的单词(带斜杠),并在结尾处得到:

your string here, do it by yourself.
我的代码是:

$string = 'your string here, please/do it by yourself.';
$parsed = preg_replace("\s*\w+\s+(?:w/)", '', $string);

它什么都不做(甚至不修改就打印字符串)

您的正则表达式没有分隔符,只是没有意义

“零个或多个空格、一个或多个单词字符、一个或多个空格,后跟一个
w
,然后是一个
/
”。。。嗯


您的正则表达式没有分隔符,而且根本没有意义

“零个或多个空格、一个或多个单词字符、一个或多个空格,后跟一个
w
,然后是一个
/
”。。。嗯


黑暗的绝对说了些什么。您需要分隔符。此外,您的正则表达式(即使带有分隔符)会说:“0-无限空格,后跟1-无限单词字符,后跟1-无限空格,后跟“w/”


那不是你想要的。您希望删除斜杠前的单词-和斜杠。您需要类似于
@\w+/@
(其中
@
sybmols是分隔符)的内容,并将其替换为
'
,例如
preg\u replace('@\w+/@','.$string)将斜杠后面的任何单词替换为零。

黑暗女神涅特·阿伯索尔说的话。您需要分隔符。此外,您的正则表达式(即使带有分隔符)会说:“0-无限空格,后跟1-无限单词字符,后跟1-无限空格,后跟“w/”


那不是你想要的。您希望删除斜杠前的单词-和斜杠。您需要类似于
@\w+/@
(其中
@
sybmols是分隔符)的内容,并将其替换为
'
,例如
preg\u replace('@\w+/@','.$string)
将斜杠后面的任何单词替换为零。

不依赖正则表达式的替代解决方案:

<?php

$example = 'your string here, please/do it by yourself.';
$expected = 'your string here, do it by yourself.';

$slashPos = strpos($example, '/');
$spacePos = strrpos($example, ' ', -1 * $slashPos);

$string1 = substr($example, 0, $spacePos + 1); // Add 1 here to not remove space
$string2 = substr($example, (strlen($example) - $slashPos - 1) * -1); // Subtract 1 here to remove /

$result = $string1 . $string2;

var_dump(assert($expected === $result));

不依赖正则表达式的替代解决方案:

<?php

$example = 'your string here, please/do it by yourself.';
$expected = 'your string here, do it by yourself.';

$slashPos = strpos($example, '/');
$spacePos = strrpos($example, ' ', -1 * $slashPos);

$string1 = substr($example, 0, $spacePos + 1); // Add 1 here to not remove space
$string2 = substr($example, (strlen($example) - $slashPos - 1) * -1); // Subtract 1 here to remove /

$result = $string1 . $string2;

var_dump(assert($expected === $result));

(?:w/)
看起来不对。它正在寻找一个
w
,然后一个
/
正则表达式在PHP中需要分隔符,您应该会得到一个错误。
(?:w/)
的可能重复项看起来是错误的。它正在寻找一个
w
,然后一个
/
正则表达式在PHP中需要分隔符,您应该会得到一个错误。如果它是分隔符,您可能需要将其转义。否则,
/
只是一个字符。@可执行文件
()
是分隔符,因此不,
/
不是特殊字符<代码>也可以使用括号样式的分隔符,其中开始括号和结束括号分别是起始分隔符和结束分隔符。()、{}、[]和都是有效的括号样式分隔符对。
-括号在正则表达式上下文中具有特殊意义。使用它们作为分隔符只会造成混淆。@revo是的,我同意,我还发现PHP允许具有特殊含义的字符作为分隔符很奇怪。这个例子不适用于这个字符吗?(
|
)我试着对希伯来语句子和这个字符进行编码,这里的示例是:
如果是分隔符,您必须将其转义。否则,
/
只是一个字符。@可执行文件
()
是分隔符,因此不,
/
不是特殊字符<代码>也可以使用括号样式的分隔符,其中开始括号和结束括号分别是起始分隔符和结束分隔符。()、{}、[]和都是有效的括号样式分隔符对。
-括号在正则表达式上下文中具有特殊意义。使用它们作为分隔符只会造成混淆。@revo是的,我同意,我还发现PHP允许具有特殊含义的字符作为分隔符很奇怪。这个例子不适用于这个字符吗?(
|
)我试着对希伯来语句子和这个字符进行编码,这里是示例:
我在键入后意识到。不过,对于正则表达式是如何工作的,有更多的解释。可能对主题初学者有用。是的,我在键入后意识到了这一点。不过,对于正则表达式是如何工作的,有更多的解释。可能对主题初学者有用。