[英]Regex for a multiline string with PHP preg_match
我想建立一個多行字符串的模式,即必須以<?php
或whitespace
+ <?php
,並沒有結束?>
或?>
+ whitespace
。
我的嘗試是/^\\s?<\\?php.*[^>]\\s?$/s
但是沒有用。 還嘗試了負面的前瞻性-沒有用。
任何想法? 提前致謝。
在PHP中,您可以使用以下正則表達式:
'/^\s*<\?php(?:.(?!\?>\s*$))*$/s'
^\\s*<\\?php
在行首匹配可選的空格和文字<?php
。 (?:.(?!\\?>\\s*$))*
將使用負前瞻匹配任何0個或多個不以?>whitespace*
結尾的?>whitespace*
。 更新:為了提高效率,此PCRE regex的執行速度將比上一個快:
'/^\s*<\?php(?>.*\?>\s*$(*SKIP)(*F)|.*+$)/s'
(*FAIL)
表現為失敗的否定斷言,並且是(?!)
的同義詞 (*SKIP)
定義了一個點,當子模式稍后發生故障時,正則表達式引擎不允許回溯 (*SKIP)(*FAIL)
一起提供了一個很好的限制選擇,即您不能在上面的正則表達式中留有可變長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.