我想用链接替换文本中的关键字。所以我创建了这个preg_replace:
$include = preg_replace('/(?!(?:[^<]+>|[^>]+<\/(span)><\/(a|option|h3)>|[^>]+<\/(a|option|h3|h4|h5|textarea|input|script)>))\b('.$key->key_word.')\b/is', '<a href="/'.$lang.'/'.$key->key_area.'/'.$key->key_page.'.html" title="'.$key->key_title.'" class="keylink">\\4</a>',$include,$limit,$count);
现在存在这个正则表达式在JavaScript(...)中工作的问题。如何更改它以解决此问题?
谢谢你的帮助!
答案 0 :(得分:0)
我们可以制作一个正则表达式以匹配您的特定情况,但鉴于这是HTML解析,并且您的用例暗示可以存在任意数量的标记,您最好使用DOM或使用类似的产品HTML Agility (free)
考虑以下PowerShell通用正则表达式的示例。在示例中,我正在遍历任何脚本标记之外的每个匹配文本。从这里,您可以将字符串替换应用于每个匹配的组。应该注意的是,如果在脚本中使用的字符串看起来像打开或关闭的<script>
标记,则会中断。
(?:^|</script[^>]*>)(.*?)(?=<script\s|$)
$Regex = '(?:^|</script[^>]*>)(.*?)(?=<script\s|$)'
$String = 'i wanna match a string contains<script src=value> is > that; bla ; bla is < this</script> match "bla" '
Write-Host start with
write-host $String
Write-Host
Write-Host found
$Matches = @()
([regex]"(?i)$Regex").matches($String) | foreach {
write-host "value at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
} # next match
start with
i wanna match a string contains<script src=value> is > that; bla ; bla is < this</script> match "bla"
found
value at 0 = 'i wanna match a string contains'
value at 89 = ' match "bla" '