Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式:匹配不在HTML标记中的特定字符串 botafogo是最好的_Html_Regex - Fatal编程技术网

正则表达式:匹配不在HTML标记中的特定字符串 botafogo是最好的

正则表达式:匹配不在HTML标记中的特定字符串 botafogo是最好的,html,regex,Html,Regex,只需要匹配botafogo(…是最好的),而不是“botafogo”值 我的程序在纯文本中自动“注释”术语: <tag value='botafogo'> botafogo is the best </tag> botafogo是最好的 到 博塔福戈是最好的 当我“替换所有”最好的词时,我有一个大问题 botafogo is the best to <team attr='best'>botafogo</team> is the best

只需要匹配botafogo(…是最好的),而不是“botafogo”值

我的程序在纯文本中自动“注释”术语:

<tag value='botafogo'> botafogo is the best </tag>
botafogo是最好的
到
博塔福戈是最好的
当我“替换所有”最好的词时,我有一个大问题

botafogo is the best 

to

<team attr='best'>botafogo</team> is the best 
botafogo是最好的

注:Java语言实现这一点的最佳方法是不使用正则表达式,而是使用适当的HTML解析器。HTML不是一种常规语言,使用正则表达式执行此操作将非常繁琐,难以维护,而且很可能仍然包含各种错误


另一方面,HTML解析器非常适合这项工作。它们中的许多都是成熟可靠的,它们为您处理每一个小细节,让您的生活更加轻松。

您是否考虑过使用DOM函数而不是正则表达式

<team attr='<adjective>best</adjective>'>botafogo</team> is the <adjective>best</adjective>

HTML解析器是最好的,然后遍历文本内容。(见其他答案。)


如果您使用的是PHP,可以通过在内容上运行
strip\u tags()
来快速解决问题,首先删除HTML。这取决于您是否正在进行替换,在这种情况下,首先剥离不是一个选项,或者您只是在匹配,在这种情况下,不属于匹配内容的内容可以毫无顾虑地删除。

@OP,用您最喜欢的语言,在
上进行拆分,然后在
上进行另一次拆分。例如蟒蛇

document.getElementsByTagName('tag')[0].innerHTML.match('botafogo')
>>s=“botafogo是最好的”
>>>对于s.split(“”)中的项目:
...  如果“)[-1]
...
博塔福戈是最好的

不需要正则表达式

我只是在寻找同一任务的解决方案,并创建了一个似乎可以完成此任务的解决方案

这是关键。 为确保匹配项不在标记内,请向前看,以确保在开始括号之前未找到闭合角括号。假设我们想找到一个单词“针”:

#针(?![^)i
我的案例是用PHP编写的,如下所示:

#needle(?![^<]+>)#i
function filter\u荧光笔($content){
$patterns=数组(
"针头(i),,
"针",,
“#需要le”
);
$replacement='Needle';
$content=preg_replace($patterns,$replacement,$content);
返回$content;
}

到目前为止,它还可以工作。

这无法可靠地完成。祝你好运,找到一个正则表达式,它甚至可以可靠地匹配单个HTML标记,更不用说不在一个标记中。不要使用正则表达式解析HTML!你能告诉我们更多关于你需要此功能的上下文吗?你使用的是什么语言,从哪里获得输入HTML,等等?“虽然你可以用越来越聪明的正则表达式来解决这些问题,但最终你会陷入一个复杂的境地。正则表达式并不能真正理解它们正在着色的代码——但解析器确实理解。”——“我的程序”注释自动在纯文本中使用术语:botafogo是最好的botafogo是最好的,当我“替换所有”最好的单词时,我有一个大问题…botafogo是最好的。那么没有好的剥离。但我会留下答案供参考。
#needle(?![^<]+>)#i
function filter_highlighter($content) {
    $patterns = array(
        '#needle(?![^<]+>)#i',
        '#<b>Need</b>le#',
        '#<strong>Need</strong>le#'
    );
    $replacement = '<span class="highlighted">Need</span>le';
    $content = preg_replace( $patterns, $replacement, $content);
    return $content;
}