删除字符串PHP中特定符号之前的所有字符

删除字符串PHP中特定符号之前的所有字符,php,preg-replace,Php,Preg Replace,例如,我有字符串123445,我想删除two之前和之后的所有字符,我知道这是函数preg_replace(),但我不知道如何编写这个表达式,我不知道它的含义,例如“/([a-z])([a-z]))/'请说出$pattern中此表达式的名称,以及它们的意思preg_replace是一个用于执行替换的函数 你可以也应该了解这些,因为它们非常强大,但它们对你的问题不是必不可少的 您可以使用strop和substr功能 substr获取要缩短的字符串、起始位置和若干字符,然后返回缩短的字符串 strpo

例如,我有字符串
123445
,我想删除
two
之前和之后的所有字符,我知道这是函数
preg_replace()
,但我不知道如何编写这个表达式,我不知道它的含义,例如“/([a-z])([a-z]))/'请说出
$pattern
中此表达式的名称,以及它们的意思preg_replace是一个用于执行替换的函数

你可以也应该了解这些,因为它们非常强大,但它们对你的问题不是必不可少的

您可以使用
strop
substr
功能

substr
获取要缩短的字符串、起始位置和若干字符,然后返回缩短的字符串

strpos
获取要搜索的字符串和要搜索的字符串,并返回第一个字符串中第二个字符串的位置

因此,您可以这样使用它们:

$text = "one two three four five";
$locationOfTwo = strpos($text, "two"); //The location in the string of the substring "two" (in this case it's 4)
$locationOfFour =strpos($text, "four") + strlen("four"); //Added the length of the word to get to the end of it (In this case it will set the variable to 18).
$subString = subsstr($text, locationOfTwo, (locationOfFour-locationOfTwo));

如果您正在寻找基于preg_replace的解决方案,那么它就是:

$str = 'one two three four five';
var_dump ( preg_replace('#^.*?(two.*?four).*$#i', '$1', $str) );
解释:preg\u replace中使用的正则表达式首先将文本匹配到起始文本
two
,然后匹配到结束文本
two
,最后将其替换为匹配字符串,从而丢弃
two
之前的所有文本和
two
之后的所有文本。请注意,
*?
使您的匹配不贪婪。请在此处阅读有关regex的更多信息:

输出
string(14) "two three four"