簡體   English   中英

正則表達式匹配PHP變量和字符串連接

[英]Regular Expressions to match PHP variable and string concatenation

我正在嘗試構建一個匹配不同類型的echo語句的正則表達式....單詞echo已匹配..

要匹配的示例模式

"hiii";
"how"."are"."you";
$var."abc";
"abc".$var;
'how'."how".$var;

var的模式

/^[a-zA-Z_][a-zA-Z0-9_]*/

我已經有一個匹配前2個模式的模式......

/((^"[^"]*"\.{0,1})*;)/

正則表達式不是一切的解決方案。 例如,在這種情況下,您很容易注意到要解析PHP代碼。 就像你不應該用正則表達式解析HTML一樣,你不應該用正則表達式解析PHP。

相反,使用PHP的tokenizer ,它可用於解析PHP表達式。

在兩個給定的建議旁邊,如果您正在尋找基於PHP PCRE的正則表達式來驗證PHP的子集,可以通過為您正在尋找的標記指定命名子模式來更加結構化。 這是一個示例性正則表達式模式,它正在尋找這些模式甚至允許任何基於us-ascii的擴展單字節字符集的空白(如PHP所做)(我認為這就是PHP實際上如何對待它,即使它是UTF-8 in你的文件):

~
(?(DEFINE)
    (?<stringDoubleQuote> "(?:\\"|[^"])+")
    (?<stringSingleQuote> '(?:\\'|[^'])+')
    (?<string> (?:(?&stringDoubleQuote)|(?&stringSingleQuote)))
    (?<variable> \\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))
    (?<varorstring> (?:(?&variable)|(?&string)))
)
^ \s* (?&varorstring) (?: \s* \. \s* (?&varorstring) )* \s* ; $
~x

由於命名的子模式,很容易為任何字符串或變量使用標記,並添加空格處理和字符串連接運算符。 這樣分配給$pattern ,一個使用的例子是:

$lines = <<<'LINES'
"hiii";
"how"."are"."you";
$var."abc";
"abc".$var;
'how'."how".$var;
LINES;    

foreach (explode("\n", $lines) as $subject) {
    $result = preg_match($pattern, $subject);
    if (FALSE === $result) {
        throw new LogicException('PCRE pattern did not compile.');
    }
    printf("%s %s match.\n", var_export($subject, true), $result ? 'did' : 'did not');
}

輸出:

'"hiii";' did match.
'"how"."are"."you";' did match.
'$var."abc";' did match.
'"abc".$var;' did match.
'\'how\'."how".$var;' did match.

演示: https//eval.in/142721

有關

您可以使用以下正則表達式執行此操作,而無需使用遞歸:

^"[^"]+"(\\."[^"]+")*;$

演示: http//regex101.com/r/oW5zH4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM