当前位置: 首页 > 知识库问答 >
问题:

正则表达式-preg_split获取内联脚本标签[重复]

骆照
2023-03-14

我正在尝试分离各个内联脚本标记:

<script>
    console.log('hello');
    console.log('hi!');
    console.log('yo!');
</script>
<script type="text/javascript">
    console.log("this is another inline script");
    var hi = "cool";
    console.log(hi);
</script>

这是我使用的模式:

$scripts = preg_split('#(<script>.*?</script>|<script type="text/javascript>.*?</script>")#', $str);    

但是我得到了这个结果:

Array
(
    [0] =>     <script>
        console.log('hello');
        console.log('hi!');
        console.log('yo!');
    </script>
    <script type="text/javascript">
        console.log("this is another inline script");
        var hi = "cool";
        console.log(hi);
    </script>
)

虽然我期望得到这样的结果:

Array
(
    [0] =>     <script>
        console.log('hello');
        console.log('hi!');
        console.log('yo!');
    </script>
    [1] =>
    <script type="text/javascript">
        console.log("this is another inline script");
        var hi = "cool";
        console.log(hi);
    </script>
)

我使用的模式有什么问题吗?提前感谢!

使现代化

如果我使用 s 修饰符,我会得到这样的内容:

Array
(
    [0] => 
    [1] => 
<script type="text/javascript">
            console.log("this is another inline script");
            var hi = "cool";
            console.log(hi);
</script>
)

它设法分离 2 个脚本,但第一个脚本变为空字符串

共有2个答案

司空俊雄
2023-03-14

试试这个:

$str=<<<STR
<script>
  console.log('hello');
  console.log('hi!');
  console.log('yo!');
</script>
<script type="text/javascript">
  console.log("this is another inline script");
  var hi = "cool";
  console.log(hi);
</script>
STR;

$split = preg_split('#(?=<script)#', $str,null,PREG_SPLIT_NO_EMPTY);
var_dump($split);

我将正则表达式更改为:

#(?=<script)#

结果是:

array(2) {
  [0]=>
  string(93) "<script>
    console.log('hello');
    console.log('hi!');
    console.log('yo!');
</script>
"
  [1]=>
  string(133) "<script type="text/javascript">
    console.log("this is another inline script");
    var hi = "cool";
    console.log(hi);
</script>"
}
郑晗日
2023-03-14

我只是要列出一个清单:

>

  • .不匹配换行符,除非使用PCRE_DOTALL(/s标志)。

    对于preg_split,您还需要preg_split_DELIM_CAPTURE选项,以便不仅删除匹配的部件。

    在您的情况下,您最好使用preg_match_all而不是preg_split

    最后,在预料到你的下一个问题时,你的表达与你的来源不符:

    ...>|<script type="text/javascript>.*?<....
                                      ^
    

    总之,最好使用以下内容:

    preg_match_all("~( <script[^>]*>  (.*?)  </script> )~smix", $src, ...
    

  •  类似资料:
    • 使用regex,我希望能够获得多个html标记之间的文本。这里的HTML只是为了表示输入,我不担心HTML标签,只是想检索HTML标签中的内容(在正确的开始和结束标签之间)。例如,以下内容: 所需输入: 所需输出: 获得的输出: Regex我尝试过: 我没有得到预期的结果。 我的java代码:

    • 我对regexp有问题。 这是一个示例文本:< code > 从这个示例中,我需要提取

    • 问题内容: 我有这个HTML输入: 我想使用正则表达式删除HTML标记,以便输出为: 谁能建议使用正则表达式执行此操作? 问题答案: 您可以使用称为Jericho Html解析器的HTML解析器。 您可以从这里下载-http://jericho.htmlparser.net/docs/index.html Jericho HTML Parser是一个Java库,允许对HTML文档的各个部分(包括服

    • 使用正则表达式,我希望能够获取多个DIV标记之间的文本。例如,以下内容: 将输出: 我使用的正则表达式模式仅匹配我的最后一个div标记并错过了第一个。代码: 输出: 找到的匹配项:1 内部DIV:这是另一个测试

    • 问题内容: 我想在pastebin上将脚本标签从此html中剥离 http://pastebin.com/mdxygM0a 我尝试使用以下正则表达式 但是它不会删除html中的所有脚本标签。它仅删除嵌入式脚本。请我需要一个可以删除所有脚本标签(行内和多行)的正则表达式。如果对我的样本http://pastebin.com/mdxygM0a进行测试,将不胜感激 谢谢 问题答案: 尝试使用正则表达式删

    • 我正在尝试使用一个Java正则表达式来提取数据。它符合我的数据,但我无法得到组数据。我正在尝试获取数据1,xmlAggregator,268803451,3。查看文档,我假设如果在\d+和\w+周围加上(),就会得到组中的数字和字符串。对如何更改正则表达式有什么建议吗? 字符串: Java代码: 输出: 希望得到: