Php 正则表达式单行多重匹配
使用PHP中的Php 正则表达式单行多重匹配,php,regex,preg-replace,Php,Regex,Preg Replace,使用PHP中的preg_replace,我试图在一个字符串中多次匹配一个正则表达式模式,有时在一行上会有两个匹配,有时不会 我有以下字符串: $text = 'Check <a href="link1">text1</a> or <a href="link2">text2</a> oh well <a href="link3">text3</a>'; 我有这个: $text = preg_replace('/(&l
preg_replace
,我试图在一个字符串中多次匹配一个正则表达式模式,有时在一行上会有两个匹配,有时不会
我有以下字符串:
$text = 'Check <a href="link1">text1</a> or <a href="link2">text2</a>
oh
well <a href="link3">text3</a>';
我有这个:
$text = preg_replace('/(<a href=")(.+)(">)(.*)(<\/a>)/', "\n$4\n$2\n", $text);
$text=preg_replace('/)
或
哦
嗯",;
谢谢你的帮助
以a和b为例
这不是为了解决您的问题,但您可以在最后一个斜杠后向正则表达式模式添加修饰符: preg_replace('/which_my_pattern_do/MODIFIERS',“here I replace”,$text)
您应该全部检查它们在给定HTML中可以找到的所有文本节点上迭代,并为父锚点创建一个特例:
$text = 'Check <a href="link1">text1</a> or <a href="link2">text2</a>
oh
well <a href="link3">text3</a>';
$dom = new DOMDocument;
$dom->loadHTML($text);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $node) {
if ($node->nodeType == XML_TEXT_NODE) {
echo $node->textContent, "\n";
if ($node->parentNode->nodeType == XML_ELEMENT_NODE && $node->parentNode->nodeName == 'a') {
echo $node->parentNode->getAttribute('href'), "\n";
}
}
}
$text='检查或
哦
嗯",;
$dom=新的DOMDocument;
$dom->loadHTML($text);
$xpath=newdomxpath($dom);
foreach($xpath->query('//text()')作为$node){
如果($node->nodeType==XML\u TEXT\u node){
echo$node->textContent,“\n”;
如果($node->parentNode->nodeType==XML\u ELEMENT\u node&&$node->parentNode->nodeName==a'){
echo$node->parentNode->getAttribute('href'),“\n”;
}
}
}
在文本域中,您可以这样做:
echo preg_replace('~<a href="([^"]+)">([^<]+)</a>~i', "\n\$2\n\$1", $text);
echo preg_replace(“~在结果字符串中,link1
和text1
是否真的需要按相反的顺序排列?好吧,最好是这样,但不是100%必要。这对用户来说更清楚。我正在尝试创建一个纯文本邮件,它将被解析为HTML邮件。PCRE中没有g
标志。preg_replace()
默认情况下会替换所有出现的内容。Wop,你说得对,我会编辑评论,谢谢!谢谢,但我想了解如何使用preg_replace解决这个问题,因为如果我理解的话,我可以在非HTML情况下重复使用此模式。谢谢,但现在我看到一个问题,即随附的text1、text2、text3也有HTML标记
@Sanne这就是我要告诉你的,这不是一个文本问题。HTML中的问题用另一种方式解决。你的其他代码也有封闭标记的问题。链接被删除。
$text = 'Check <a href="link1">text1</a> or <a href="link2">text2</a>
oh
well <a href="link3">text3</a>';
$dom = new DOMDocument;
$dom->loadHTML($text);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $node) {
if ($node->nodeType == XML_TEXT_NODE) {
echo $node->textContent, "\n";
if ($node->parentNode->nodeType == XML_ELEMENT_NODE && $node->parentNode->nodeName == 'a') {
echo $node->parentNode->getAttribute('href'), "\n";
}
}
}
echo preg_replace('~<a href="([^"]+)">([^<]+)</a>~i', "\n\$2\n\$1", $text);