PHP/Perl正则表达式帮助!

PHP/Perl正则表达式帮助!,php,regex,Php,Regex,我有一个字符串: $string = "This is my big <span class="big-string">string</span>"; $string=“这是我的大字符串”; 我不知道如何编写一个正则表达式来替换“big”中的“b”,而不替换“big string”中的“b”。我需要替换子字符串的所有出现,除非该子字符串出现在html标记中 感谢您的帮助 编辑 也许更多的信息会有所帮助。我正在开发一个自动完成功能,它可以突出显示您在当前结果集中搜索的内

我有一个字符串:

$string = "This is my big <span class="big-string">string</span>";
$string=“这是我的大字符串”;
我不知道如何编写一个正则表达式来替换“big”中的“b”,而不替换“big string”中的“b”。我需要替换子字符串的所有出现,除非该子字符串出现在html标记中

感谢您的帮助

编辑

也许更多的信息会有所帮助。我正在开发一个自动完成功能,它可以突出显示您在当前结果集中搜索的内容。当前,如果在搜索对话框中键入“aut”,则结果如下所示:automotive


当我搜索“自动b”时出现问题。首先,我将所有出现的“auto”替换为“
auto
”,然后将所有出现的“b”替换为“
b
”。不幸的是,第二次扫描将“
auto
”更改为“
auto

是否可以保证“big”不会紧跟在
”之前?如果是,那么
s/([^“]))b/$1foo/
应该用
foo

替换有问题的
b
有没有保证“big”前面不会立即加上
?如果有,那么
s/([^“])b/$1foo/
应该用
foo
替换有问题的
b
。只需遍历文本节点并执行一个简单的
str\u replace
。您会在调试时感谢我的。

请。只需遍历文本节点并执行一个简单的
str\u replace
。您会在调试时感谢我的。

如果您坚持使用正则表达式,这一个将做得相当不错:

$re='/#(粗略地)匹配不在HTML标记中的子字符串。
大#要匹配的子字符串。
(?=#断言我们不在HTML标记内。
[^]*#消耗所有不超过。。。

(?:如果你坚持使用正则表达式,这一个将做得相当不错:

$re='/#(粗略地)匹配不在HTML标记中的子字符串。
大#要匹配的子字符串。
(?=#断言我们不在HTML标记内。
[^]*#消耗所有不超过。。。


(?:您真正的字符串主要是HTML还是只有一些小片段?这里有一个提示…看看每个“b”的周围字符。一个前面有空格,另一个在引号中。我曾经遇到过类似的问题。我用
span
s替换了所有
div
s,最后用类“spanider”替换了几个元素。使用“b”只是一个例子。我可能需要替换“a”,但我不想弄乱“class”@user1750。如果字符串不够具体,无法排除是属性的开头,那么您可能需要解析HTML。著名的解释就是为什么。可以在HTML上执行一些粗略的正则表达式,但它们只能-rough.除非搜索已经非常具体,否则很难检测字符串是否在标记内。您真正的字符串主要是HTML还是只有小片段?这里有一个提示…看看每个“b”的周围字符。一个在前面有空格,另一个在引号中。我曾经遇到过类似的问题。我用
span
s替换了所有
div
s,最后用类“spanider”替换了几个元素。使用“b”只是一个例子。我可能需要替换“a”,但我不想弄乱“class”@user1750。如果字符串不够具体,无法排除是属性的开头,那么您可能需要解析HTML。著名的解释就是为什么。可以在HTML上执行一些粗略的正则表达式,但它们只能-rough.要检测字符串是否在标记内是非常困难的,除非您的搜索已经非常具体。1美元是什么意思?我在一些地方见过它。不保证。我基本上需要一个正则表达式来忽略标记字符之间的任何内容<>在这种情况下,您不应该使用正则表达式。另外,$1,$2,等等,获取变量可以用括号匹配。请看一下
perldoc perlRequest
。1美元是什么意思?我在一些地方见过它。不保证。我基本上需要一个正则表达式来忽略标记字符之间的任何内容<>在这种情况下,您不应该使用正则表达式。另外,$1,$2等,获取用括号匹配的变量。以看一下
perldoc perlrequick
+1:显然,当每个人发现正则表达式时,我们必须单独告诉他们这一点+1:显然,当每个人发现正则表达式时,我们必须单独告诉他们这一点