Php 如何使用preg_replace围绕特定值修剪所有内容
我试图找到一个与模式匹配的值X:Php 如何使用preg_replace围绕特定值修剪所有内容,php,regex,preg-replace,Php,Regex,Preg Replace,我试图找到一个与模式匹配的值X: <span class="line-item-quantity-raw">X</span> X 一旦我得到了这个值,我想修剪它周围的所有东西。虽然我知道我可以使用preg_match来获得值并设置变量,但我很好奇为什么我不能使用preg_match来实现我的原始方法 $footer = '<div class="line-item-summary"> <div class="line-item-quantity"
<span class="line-item-quantity-raw">X</span>
X
一旦我得到了这个值,我想修剪它周围的所有东西。虽然我知道我可以使用preg_match来获得值并设置变量,但我很好奇为什么我不能使用preg_match来实现我的原始方法
$footer = '<div class="line-item-summary">
<div class="line-item-quantity">
<span class="line-item-quantity-raw">1</span>
<span class="line-item-quantity-label">item</span>
</div>
<div class="line-item-total">
<span class="line-item-total-label">Total:</span>
<span class="line-item-total-raw">$1,500.00</span>
</div>
</div>';
$pattern = '/.*<span class="line-item-quantity-raw">(\d+)<\/span>.*/';
$replace = '($1) -';
$footer = preg_replace($pattern, $replace, $footer);
$footer=<
1.
项目
总数:
$1,500.00
';
$pattern='/.*(\d+).*/';
$replace='($1)-';
$footer=preg_replace($pattern,$replace,$footer);
不幸的是,这似乎只去除了$pattern
中指定的span标记,但是$pattern
边缘上的额外标记,如*
仍在保留
令人烦恼的是,在测试页面中运行我的代码,就像在php中运行我上面的代码一样。默认情况下,点与换行符不匹配 如果您使用
/s
修饰符,那么它将匹配它们(以及字符串的整个其余部分,这可能是您想要的,也可能不是您想要的)
$pattern='/.*(\d+).*/s';
默认情况下,点与换行符不匹配
如果您使用/s
修饰符,那么它将匹配它们(以及字符串的整个其余部分,这可能是您想要的,也可能不是您想要的)
$pattern='/.*(\d+).*/s';
这是因为默认情况下,
与换行符不匹配。要使
跨越多行,需要添加修饰符s
:
$pattern = '/.*<span class="line-item-quantity-raw">(\d+)<\/span>.*/s';
$pattern='/.*(\d+).*/s';
s(PCRE\u DOTALL)
如果设置了此修改器,则图案中的点元字符将匹配所有字符,包括换行符。没有它,新行被排除在外。此修饰符相当于Perl的/s修饰符。像[^A]这样的负数类始终与换行符匹配,与此修饰符的设置无关
这是因为默认情况下,
与换行符不匹配。要使
跨越多行,需要添加修饰符s
:
$pattern = '/.*<span class="line-item-quantity-raw">(\d+)<\/span>.*/s';
$pattern='/.*(\d+).*/s';
s(PCRE\u DOTALL)
如果设置了此修改器,则图案中的点元字符将匹配所有字符,包括换行符。没有它,新行被排除在外。此修饰符相当于Perl的/s修饰符。像[^A]这样的负数类始终与换行符匹配,与此修饰符的设置无关
请注意,
DOTALL
标志有点生硬。无论如何,强烈建议使用非贪婪量词+?
,*?
,以避免过度匹配过多字符串,但在使用DOTALL
@Li aungYip时,您的观点绝对有效,但在这种特殊情况下,这是期望的行为。请注意,DOTALL
标志有点生硬。无论如何,强烈建议使用非贪婪量词+?
,*?
,以避免过度匹配过多字符串,但在使用DOTALL
@Li aungYip时,您的观点绝对有效,但在这种特殊情况下,这是所需的行为。感谢您的回答,你有太多的代表:)谢谢你的回答,你有太多的代表:)