[英]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=\\"]
僅代表一種所列出的字符單字符因此,要么。 h
, t
, p
, :
, /
,等等。如果你的意思是表達http://some.url.com/index.php?showtopic="
字面意思,只使用http://some\\.url\\.com/index\\.php\\?showtopic="
(不要忘記逃避元字符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.