我對preg_match的使用很新穎。在發佈這個問題之前搜索了很多答案。發現了很多帖子來獲取基於YouTube的ID等數據,但沒有根據我的需要。如果它的愚蠢問題,請原諒我。如何使用preg_match提取數據?
我需要從帶有preg_match的字符串中獲取ID。字符串的格式爲
[#1234] Subject
如何從字符串中只提取「1234」?
我對preg_match的使用很新穎。在發佈這個問題之前搜索了很多答案。發現了很多帖子來獲取基於YouTube的ID等數據,但沒有根據我的需要。如果它的愚蠢問題,請原諒我。如何使用preg_match提取數據?
我需要從帶有preg_match的字符串中獲取ID。字符串的格式爲
[#1234] Subject
如何從字符串中只提取「1234」?
一種解決方案是:
\[#(\d+)\]
這個模式匹配左括號和井號[#
,然後捕獲一個或多個數字,則關閉右方括號]
。
你會用它喜歡:
preg_match('/\[#(\d+)\]/', '[#1234] Subject', $matches);
echo $matches[1]; // 1234
你可以看到它在this demo工作。
你可以試試這個:
preg_match('~(?<=\[#)\d+(?=])~', $txt, $match);
(?<=..)
是回顧後(僅一個檢查)
(?=..)
是一個超前
你的正則表達式:這是一個
preg_match('/^\[\#([0-9]+)\].+/i', $string, $array);
你可以這樣做:
<?php
$subject = "[#1234] Subject";
$pattern = '/^\[\#([0-9]+)/';
preg_match($pattern, $subject, $matches);
echo $matches[1]; // 1234
?>
,僅保留整數,你可以使用子模式http://php.net/manual/en/regexp.reference.subpatterns.php
$string="[#1234] Subject";
$pattern="/\[#(?P<my_id>\d+)](.*?)/s";
preg_match($pattern,$string,$match);
echo $match['my_id'];
它不工作,如果有像重新標識的任何前綴:[#1234]主題 – Mic
@Mic - 那不是在你原來的文章中,但是通過從正則表達式中刪除'^'很容易修復。我會更新我的答案。 – nickb
對不起,如果我的問題造成混亂。 – Mic