簡體   English   中英

PHP RegExpr錯誤未知修飾符'('

[英]PHP RegExpr error Unkown modifier '('

我有這個正則表達式:

([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)

它用於從論壇中提取主題的鏈接

現在當我在我的腳本中使用它時

$url = "([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)";

preg_match_all吐:“未知的修飾符'('”

這也是對preg_match的調用

preg_match_all($url, $str, $matches,PREG_OFFSET_CAPTURE,3);

任何人都可以幫我解決這個明顯愚蠢的問題

您需要將正則表達式包裝在分隔符中。 任何不是特殊PCRE元字符的字符都可以,所以我將使用#

$url = "#([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)#";

您可以在PHP手冊部分中了解有關PCRE分隔符的更多有關分隔符的信息

PCRE需要將實際正則表達式與可選修飾符分開的分隔符 使用PHP,您可以使用任何非字母數字,非反斜杠,非空白字符甚至成對的分隔符(括號)。

在您的情況下,前導(用作分隔符和第一個相應的結束)標記正則表達式的結尾; 其余的被視為修飾符:

([http://some.url.com/index.php?showtopic=\"]*)([0-9]+(?:\.[0-9]*)?)
^                                             ^

但是結尾分隔符( ( )之后的第一個字符不是有效的修飾符。這就是為什么錯誤消息顯示未知修飾符' ( '

在大多數情況下, /用作Perl中的分隔符。 但這需要轉義正則表達式中/每次出現。 因此,選擇不在正則表達式中的分隔符是一個不錯的選擇。 你的情況,你可以使用#像BoltClock建議。

哦,順便說:字符類等[http://some.url.com/index.php?showtopic=\\"]僅代表一種所列出的字符單字符因此,要么。 htp:/ ,等等。如果你的意思是表達http://some.url.com/index.php?showtopic="字面意思,只使用http://some\\.url\\.com/index\\.php\\?showtopic=" (不要忘記逃避元字符)。

暫無
暫無

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

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