我要做的是在通配符子字符串之前获取所有字符。例如,如果我有以下字符串:
I.Want.This.Bit.D00F00.Non.Of.This
所以,我希望输出为I.Want.This.Bit
D
中的F
和D00F00
总是会在那里,但中间的整数会发生变化。因此可能是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
。
非常感谢任何指导。
答案 0 :(得分:2)
可能最好使用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]中。
您可以在此处使用/测试正则表达式:https://regex101.com/r/sM4wN9/1
答案 1 :(得分: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];
答案 2 :(得分:0)
看看这个问题并回答堆栈溢出。
How do I find the index of a regex match in a string?
您可以对D [0-9] {2} F [0-9] {2}运行正则表达式以获取D的索引,然后将其传递到您的substr中,这将为您提供上半部分。只有在出于某种原因你想要保留的部分中的通配符时,才会出现问题。
希望有所帮助!
答案 3 :(得分:0)
您可以使用正则表达式(https://php.net/manual/en/book.pcre.php),例如
$subString = preg_replace('~\.D\d{2}+F\d{2}\..*$~', '', $string);