substr 查找通配符子串之前的所有文本
substr to find all text before a wildcard substring
我想要做的是获取通配符子串之前的所有字符。例如,如果我有以下字符串:
I.Want.This.Bit.D00F00.Non.Of.This
所以,我希望输出为 I.Want.This.Bit
D
和 D00F00
中的 F
会一直存在,但中间的整数会发生变化。所以它可能是 D13F02
,或 D01F15
。 D
和 F
.
后不会超过 2 个整数
我曾考虑过执行以下操作,但后来意识到它行不通:
$string = "I.Want.This.Bit.D00F00.Non.Of.This"
$substring = substr($string, 0, strpos($string, '.D'));
它不起作用的原因是我想保留的字符串中可能有一个 .D
,例如 The.Daft.String.D03F12
。使用该示例,我得到的只是 The
作为输出,而不是 The.Daft.String
.
任何指导将不胜感激。
看看这个关于堆栈溢出的问题和答案。
How do I find the index of a regex match in a string?
您可以 运行 针对 D[0-9]{2}F[0-9]{2} 的正则表达式来获取 D 的索引,然后将其传递到您的子字符串中,这将给出你上半场唯一的问题是,如果出于某种原因,您想要保留的部分中有您的通配符。
希望对您有所帮助!
您可以为此使用正则表达式 (https://php.net/manual/en/book.pcre.php),例如
$subString = preg_replace('~\.D\d{2}+F\d{2}\..*$~', '', $string);
最好为此使用 preg_match,因为您要捕获字符串的特定部分。使用正则表达式捕获组。
<?php
$pattern = "/^([A-Za-z\.]+)\.D[0-9]{2}F[0-9]{2}/";
$subject = "I.Want.This.Bit.D00F00.Non.Of.This";
preg_match($pattern, $subject, $matches);
print_r($matches);
在这种情况下,您想要的捕获组将在 $matches[1] 中。
您可以在此处播放 with/test 正则表达式:https://regex101.com/r/sM4wN9/1
这是一个工作代码片段(使用 Devins Regexp):
$string = "I.Want.This.Bit.D00F00.Non.Of.This";
preg_match('/(.*)D[0-9]{2}F[0-9]{2}/', $string, $matches);
echo $matches[1];
我想要做的是获取通配符子串之前的所有字符。例如,如果我有以下字符串:
I.Want.This.Bit.D00F00.Non.Of.This
所以,我希望输出为 I.Want.This.Bit
D
和 D00F00
中的 F
会一直存在,但中间的整数会发生变化。所以它可能是 D13F02
,或 D01F15
。 D
和 F
.
我曾考虑过执行以下操作,但后来意识到它行不通:
$string = "I.Want.This.Bit.D00F00.Non.Of.This"
$substring = substr($string, 0, strpos($string, '.D'));
它不起作用的原因是我想保留的字符串中可能有一个 .D
,例如 The.Daft.String.D03F12
。使用该示例,我得到的只是 The
作为输出,而不是 The.Daft.String
.
任何指导将不胜感激。
看看这个关于堆栈溢出的问题和答案。
How do I find the index of a regex match in a string?
您可以 运行 针对 D[0-9]{2}F[0-9]{2} 的正则表达式来获取 D 的索引,然后将其传递到您的子字符串中,这将给出你上半场唯一的问题是,如果出于某种原因,您想要保留的部分中有您的通配符。
希望对您有所帮助!
您可以为此使用正则表达式 (https://php.net/manual/en/book.pcre.php),例如
$subString = preg_replace('~\.D\d{2}+F\d{2}\..*$~', '', $string);
最好为此使用 preg_match,因为您要捕获字符串的特定部分。使用正则表达式捕获组。
<?php
$pattern = "/^([A-Za-z\.]+)\.D[0-9]{2}F[0-9]{2}/";
$subject = "I.Want.This.Bit.D00F00.Non.Of.This";
preg_match($pattern, $subject, $matches);
print_r($matches);
在这种情况下,您想要的捕获组将在 $matches[1] 中。
您可以在此处播放 with/test 正则表达式:https://regex101.com/r/sM4wN9/1
这是一个工作代码片段(使用 Devins Regexp):
$string = "I.Want.This.Bit.D00F00.Non.Of.This";
preg_match('/(.*)D[0-9]{2}F[0-9]{2}/', $string, $matches);
echo $matches[1];