使用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允许具有特殊含义的字符作为分隔符很奇怪。这个例子不适用于这个字符吗?(|
)我试着对希伯来语句子和这个字符进行编码,这里是示例:我在键入后意识到。不过,对于正则表达式是如何工作的,有更多的解释。可能对主题初学者有用。是的,我在键入后意识到了这一点。不过,对于正则表达式是如何工作的,有更多的解释。可能对主题初学者有用。