我想使用 PHP 复制字符串的子字符串。
第一个模式的正则表达式是/\d\|\d\w0:/
第二种模式的正则表达式是/\d\w\w\d+:\s-\s:/
是否可以结合preg_match
使用strpos
以获得从头到尾的确切位置,然后将其复制:
substr( $string, $firstPos,$secPos ) ?
我想使用 PHP 复制字符串的子字符串。
第一个模式的正则表达式是/\d\|\d\w0:/
第二种模式的正则表达式是/\d\w\w\d+:\s-\s:/
是否可以结合preg_match
使用strpos
以获得从头到尾的确切位置,然后将其复制:
substr( $string, $firstPos,$secPos ) ?
我不确定,但也许你可以像这样使用preg_split:
$mysubtext = preg_split("/\d\|\d\w0:/", $mytext);
$mysubtext = preg_split("/\d\w\w\d+:\s-\s:/", $mysubtext[1]);
$mysubtext = $mysubtext[0];
当使用第四个参数时,preg_match()
你甚至可以设置PREG_OFFSET_CAPTURE
标志让函数返回匹配字符串的偏移量。所以应该没有必要结合preg_match()
and strpos()
。
当然。
或者,您可以将这些模式组合成一个新的超级神奇的模式,它与它们之间的内容相匹配(通过断言前缀出现在匹配的子字符串之前,而后缀紧跟在它之后)。
$prefix = '\d|\d\w0:';
$suffix = '\d\w\w\d+:\s-\s:';
if (preg_match("/(?<=$prefix).*?(?=$suffix)/", $subject, $match)) {
$substring = $match[0];
}
(旁白:如果您的子字符串将跨越多行,您可能会想要使用s
修饰符或其他东西。).
preg_match 的第三个参数是一个输出参数,它收集您的捕获,即匹配的实际字符串。用这些来喂你的 strpos。Strpos 不接受正则表达式,但捕获将包含实际匹配的文本,该文本包含在您的字符串中。要进行捕获,请使用括号。
例如(没有尝试过,但这是为了得到这个想法):
$str = 'aaabbbaaa';
preg_match('/(b+)/', $str, $regs );
// now, $regs[0] holds the entire string, while $regs[1] holds the first group, i.e. 'bbb'
// now feed $regs[1] to strpos, to find its position