我一直在尝试做一个正则表达式来匹配和替换HTML一部分上关键字的出现:
keyword
和<strong>keyword</strong>
<a href="someurl.html" target="_blank">keyword</a>
并且<a href="someur2.html">already linked keyword </a>
不应该匹配我只对keyword
第一行的匹配(和替换)感兴趣。
我想要这样做的原因是要替换keyword
为<a href="dictionary.php?k=keyword">keyword</s>
,但前提是keyword
它尚未位于<a>
标记内。
任何帮助都感激不尽!
我设法通过以下方式完成了我想做的事情( 不使用Regex ):
<a>
标签(将它们复制到临时数组并在字符串上保留占位符)str_replace
新字符串以替换所有关键字<a>
标签重新填充占位符这是我使用的代码,以防其他人需要它:
$str = <<<STRA
Moses supposes his toeses are roses,
but <a href="original-moses1.html">Moses</a> supposes erroneously;
for nobody's toeses are posies of roses,
as Moses supposes his toeses to be.
Ganda <span class="cenas"><a href="original-moses2.html" target="_blank">Moses</a></span>!
STRA;
$arr1 = str_split($str);
$arr_links = array();
$phrase_holder = '';
$current_a = 0;
$goto_arr_links = false;
$close_a = false;
foreach($arr1 as $k => $v)
{
if ($close_a == true)
{
if ($v == '>') {
$close_a = false;
}
continue;
}
if ($goto_arr_links == true)
{
$arr_links[$current_a] .= $v;
}
if ($v == '<' && $arr1[$k+1] == 'a') { /* <a */
// keep collecting every char until </a>
$arr_links[$current_a] .= $v;
$goto_arr_links = true;
} elseif ($v == '<' && $arr1[$k+1] == '/' && $arr1[$k+2] == 'a' && $arr1[$k+3] == '>' ) { /* </a> */
$arr_links[$current_a] .= "/a>";
$goto_arr_links = false;
$close_a = true;
$phrase_holder .= "{%$current_a%}"; /* put a parameter holder on the phrase */
$current_a++;
}
elseif ($goto_arr_links == false) {
$phrase_holder .= $v;
}
}
echo "Links Array:\n";
print_r($arr_links);
echo "\n\n\nPhrase Holder:\n";
echo $phrase_holder;
echo "\n\n\n(pre) Final Phrase (with my keyword replaced):\n";
$final_phrase = str_replace("Moses", "<a href=\"novo-mega-link.php\">Moses</a>", $phrase_holder);
echo $final_phrase;
echo "\n\n\nFinal Phrase:\n";
foreach($arr_links as $k => $v)
{
$final_phrase = str_replace("{%$k%}", $v, $final_phrase);
}
echo $final_phrase;
输出:
链接数组:
Array
(
[0] => <a href="original-moses1.html">Moses</a>
[1] => <a href="original-moses2.html" target="_blank">Moses</a>
)
词组:
Moses supposes his toeses are roses,
but {%0%} supposes erroneously;
for nobody's toeses are posies of roses,
as Moses supposes his toeses to be.
Ganda <span class="cenas">{%1%}</span>!
(上)最终词组(替换为我的关键字):
<a href="novo-mega-link.php">Moses</a> supposes his toeses are roses,
but {%0%} supposes erroneously;
for nobody's toeses are posies of roses,
as <a href="novo-mega-link.php">Moses</a> supposes his toeses to be.
Ganda <span class="cenas">{%1%}</span>!
最终词组:
<a href="novo-mega-link.php">Moses</a> supposes his toeses are roses,
but <a href="original-moses1.html">Moses</a> supposes erroneously;
for nobody's toeses are posies of roses,
as <a href="novo-mega-link.php">Moses</a> supposes his toeses to be.
Ganda <span class="cenas"><a href="original-moses2.html" target="_blank">Moses</a></span>!
问题内容: 我一直在尝试做一个正则表达式来匹配和替换HTML一部分上关键字的出现: 我想匹配和 但是并且不应该匹配 我只对第一行的匹配(和替换)感兴趣。 我想要此操作的原因是将其替换为,但仅当它尚未位于标记中时才可以。 任何帮助都感激不尽! 问题答案: 我设法通过以下方式完成了我想做的事情( 不使用Regex ): 解析字符串的每个字符 删除所有标签(将它们复制到临时数组并在字符串上保留占位符)
问题内容: 我在html页面上制作了preg_replace。我的模式旨在为html中的某些单词添加周围的标记。但是,有时我的正则表达式会修改html标签。例如,当我尝试替换此文本时: 这样读,我的正则表达式也锚标记的alt属性取代亚萨尔。当前我正在使用的外观如下: 如何制作正则表达式,使其与html标记内的任何内容都不匹配? 问题答案: 您可以为此使用断言,因为您只需要确保搜索到的单词出现在或之
问题内容: 我正在研究一个小的Python脚本来清理HTML文档。它的工作方式是接受KEEP的标签列表,然后解析不在列表中的HTML代码,破坏标签我一直在使用正则表达式来做到这一点,而且我已经能够匹配开始标签和自动关闭标签但不关闭标签。 我一直在尝试匹配结束标记的模式是。在我看来这是合乎逻辑的,所以为什么不起作用?本应匹配任何不是一个锚定标记(不就是“a”是可以anything –这只是一个例子)
我想验证输入的代码是否是HTML代码(必须以<代码> 我试着这么做 但是我有一个问题需要在代码中做一个\n,我需要验证第一个和结束标签(=
有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。
问题内容: 我正在制作一个键值解析器,其中输入字符串采用的形式。键可以包含字符,并且和值可以包含任何字符,但,,和需要用反斜杠前缀。逗号用于分隔键值对,但在最后一对之后不需要。 到目前为止,我已经可以匹配大多数键和值,但是很显然它将不能处理多于一对的字符或者任何“控制”字符都不能转义。似乎匹配所有转义字符,但不匹配任何“正常”字符。 有没有办法检查逗号分隔并匹配所有转义的“控制”字符以及普通字符?