Php 使用正则表达式匹配html标记中的特定内容
我想匹配'script'标记,如果它内部包含Php 使用正则表达式匹配html标记中的特定内容,php,regex,Php,Regex,我想匹配'script'标记,如果它内部包含'bb',它可以是'bb'和'script'标记之间的任何东西,包括换行符,所以我使用[\s\s]* 以下是我正在处理的文本: <script> aa </script> <script> bb </script> <script> cc </script> aa bb 复写的副本 模式是:[\s\s]*?bb[\s\s]*? 但是这也将'script'标记与'aa'内
'bb'
,它可以是'bb'
和'script'
标记之间的任何东西,包括换行符,所以我使用[\s\s]*
以下是我正在处理的文本:
<script>
aa
</script>
<script>
bb
</script>
<script>
cc
</script>
aa
bb
复写的副本
模式是:[\s\s]*?bb[\s\s]*?
但是这也将'script'
标记与'aa'
内部匹配,我尝试了很多次但都没有成功,那么如何将脚本标记与'bb'
内部匹配?只需使用\s+bb\s+
说明:
-按字面意思匹配
\s+bb\s+-将一个或多个空格与
\s+匹配,将
bb逐字匹配,再次将一个或多个空格与
\s匹配+`
-按字面意思匹配
您可以使用[\s\s]
,它匹配每个字符:\s
-匹配任何空白,\s
-匹配除空白以外的所有字符。这就是您的模式不起作用的原因。只需使用\s+bb\s+
说明:
-按字面意思匹配
\s+bb\s+-将一个或多个空格与
\s+匹配,将
bb逐字匹配,再次将一个或多个空格与
\s匹配+`
-按字面意思匹配
您可以使用
[\s\s]
,它匹配每个字符:\s
-匹配任何空白,\s
-匹配除空白以外的所有字符。这就是您的模式不起作用的原因。使用正则表达式解析HTML不是一个好主意,因为在嵌套脚本标记时,它可能会给您带来意外的结果
但为了防止标记没有嵌套,您可以使用这个正则表达式,它将只匹配包含bb
的脚本标记,并且不会像现在这样跨越多个脚本标记。在您的正则表达式中,[\s\s]*?
匹配任何字符,因为它也匹配从第一个
标记开始的顺序
标记,该标记跨越多个
标记以覆盖bb
<script>(?:(?!<script>)[\s\S])*?bb(?:(?!<script>)[\s\S])*?<\/script>
(?:(?!)[\s\s])*?bb(?:(?!)[\s\s])*?
此正则表达式与您的正则表达式几乎相同,唯一不同的是,我将[\s\s]*?
部分更改为(?:(?!)[\s\s])*?
此正则表达式不允许在单个匹配中捕获多个
标记,因此一次只匹配一个脚本标记
让我知道这是否适合你
使用正则表达式解析HTML不是一个好主意,因为当脚本标记嵌套时,它可能会给您带来意外的结果 但为了防止标记没有嵌套,您可以使用这个正则表达式,它将只匹配包含
bb
的脚本标记,并且不会像现在这样跨越多个脚本标记。在您的正则表达式中,[\s\s]*?
匹配任何字符,因为它也匹配从第一个
标记开始的顺序
标记,该标记跨越多个
标记以覆盖bb
<script>(?:(?!<script>)[\s\S])*?bb(?:(?!<script>)[\s\S])*?<\/script>
(?:(?!)[\s\s])*?bb(?:(?!)[\s\s])*?
此正则表达式与您的正则表达式几乎相同,唯一不同的是,我将[\s\s]*?
部分更改为(?:(?!)[\s\s])*?
此正则表达式不允许在单个匹配中捕获多个
标记,因此一次只匹配一个脚本标记
让我知道这是否适合你
模式:
/]*>(.*)/gi
然后检查contents@Seblor没错,尽管正则表达式仍然可以用于简单的文本,比如一个操作provided@GrafiCodeStudio它与任何内容都不匹配。模式:/]*>(.*)/gi
,然后检查contents@Seblor的确,尽管正则表达式仍然可以用于简单的文本,比如provided@GrafiCodeStudio它与任何内容都不匹配。我的模式工作一半正确,它与第一个“script”标记匹配,这是错误的,但以正确的script标记结束,我希望匹配从第二个“script”标记开始。我使用\s\s是因为它可以是多个字符(包括空格)。我的模式工作对半,它与第一个“script”标记匹配,这是错误的,但以正确的script标记结束。我希望匹配从第二个“script”标记开始。我使用\s\s是因为它可以使用多个字符(包括空格)!这是使用前瞻,我将需要尝试,这是工作现在@露露:很高兴知道这对你很有效。也请考虑接受答案,这将给你+2代表,并可能有助于其他人在回答一个类似的问题。它的工作!这是使用前瞻,我将需要尝试,这是工作现在@露露:很高兴知道这对你很有效。另外,请考虑接受答案,这将给你+2代表,并可能有助于其他人在回答一个类似的问题。