我想用class“testing2”和跨度类中的最后一个字母“testing”来包装第二个到最后一个字母。我得到了如何做最后一封信,但第二封信到底怎么样?PHP将不同跨度中的最后一个字母和最后一个字母包裹起来
echo preg_replace('/(.)$/', '<span class="testing">\1</span>', $title)
我想用class“testing2”和跨度类中的最后一个字母“testing”来包装第二个到最后一个字母。我得到了如何做最后一封信,但第二封信到底怎么样?PHP将不同跨度中的最后一个字母和最后一个字母包裹起来
echo preg_replace('/(.)$/', '<span class="testing">\1</span>', $title)
这个正则表达式将找到字符串中的最后2个字母并分别捕获它们。
.*([a-zA-Z])([a-zA-Z]).*$
演示:https://regex101.com/r/yR1sT8/1
PHP用法:
$string = 'aaffffs3.4.4asdf234f4f3_+!#>,3';
preg_match('/.*([a-zA-Z])([a-zA-Z]).*$/', $string, $letters);
print_r($letters);
输出:
Array
(
[0] => aaffffs3.4.4asdf234f4f3_+!#>,3
[1] => d
[2] => f
)
......或者......
$string = 'aaffffs3.4.4asdf234f4f3_+!#>,3';
echo preg_replace('/.*([a-zA-Z])([a-zA-Z]).*$/', '<span class="testing2">$1</span><span class="testing">$2</span>',$string);
输出:
<span class="testing2">d</span><span class="testing">f</span>
如果你不关心最后letters
,只是想比这角色是容易得多,只是,(.)(.)$
。
可能的替代:https://regex101.com/r/yR1sT8/2
更新:
保留以前的价值以及我们只需要添加额外的捕捉组。
$string = 'aaffffs3.4.4asdf234f4f3_+!#>,3';
echo preg_replace('/(.*)([a-zA-Z])([a-zA-Z])(.*)$/', '$1<span class="testing2">$2</span><span class="testing">$3</span>$4',$string);
输出:
aaffffs3.4.4as<span class="testing2">d</span><span class="testing">f</span>234f4f3_+!#>,3
附加:
的()
是捕获基团。这些内部的任何内容都可以分组,可以以多种方式使用。例如,假设你想评估一个句子,并且你不在意the
这个词开始,你可以这样做。
`(?:The)? wolf was walking down the street`
这里the
进行分组和?
,使该整词可选。 ?:
使捕获组不捕获,所以$1
不会出现在这里。 $1
,$2
等都按它们在正则表达式中出现的顺序命名。您可以在这里阅读更多关于捕获组的信息,http://www.regular-expressions.info/refcapture.html和 http://www.rexegg.com/regex-capture.html。取决于语言,对捕获值的引用可能是\1
。
谢谢克里斯。但是这只是返回包含在span中的最后2个字母。我想返回整个短语,以及最后2个字母,并带有新的跨度。 – optimus203
好吧,我会更新捕获组。 – chris85
你可以用preg_replace做最后一个选项。这是我要去的路线。 – optimus203
请至少发布一个预期输出示例。 –