簡體   English   中英

preg_match():編譯失敗:字符無法識別

[英]preg_match(): Compilation failed: unrecognized character

對不起我的英語不好。

$string = "product#[:id]#[:str]";

$regex = preg_replace("/\[:(\w+)\]/", "(?<$1>.+?)", $string);

我得到的是product#(?.+?)#(?.+?)而不是product#(?<id>.+?)#(?<str>.+?)

我想這樣做是因為我需要preg_match()在$ matches中創建鍵名:

preg_match('/^'. $regex .'$/', str_replace("/", "#", self::$path), $matches)

關鍵是,它可以在不使用“ <”和“>”的情況下工作。 但是我需要它們用於下一個代碼。 那么我應該如何處理這些'<','>'字符? 我需要它們,但不知道該怎么辦。 我也試圖逃脫它們:\\ <(但沒有結果)。

如果您有任何想法請幫助我。

編輯:

好像我做的還可以。 現在有一個新問題:

$string = "product#[i:id]#[*:str]";

$regex = preg_replace("/\[i:(\w+)\]/", "(?<$1>[0-9]+)", $regex);
$regex = preg_replace("/\[\*:(\w+)\]/", "(?<$1>.+?)", $regex);

不,我嘗試了其他方法,但這不起作用。 為什么? :(

如果要在瀏覽器中呈現preg_replace的結果,並且僅此呈現結果應包含<>字符,則應將其生成為&lt; &gt;

因此,也許您的替換字符串( preg_replace第二個參數)應該是:

(?&lt;$1&gt;.+?)

暫無
暫無

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

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