舉個例子:AAA@XXX YYYY匹配到@和空格之間的字符XXX,請問正則怎么來寫?
6 回答

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
if(preg_match_all(
'%@(\w+)%u',
'@張全蛋 含淚質檢@三星Note7 被炸飛,聽說@炸機 跟@啤酒 更配哦!',
$arr
)) {
var_export($arr);
}
//輸出
array (
0 =>
array (
0 => '@張全蛋',
1 => '@三星Note7',
2 => '@炸機',
3 => '@啤酒',
),
1 =>
array (
0 => '張全蛋',
1 => '三星Note7',
2 => '炸機',
3 => '啤酒',
),
)
正則表達式 %@(\w+)%u
中:%
是分隔符.u
是修飾符,表示unicode.\w
是元字符,在ASCII下等價于[A-Za-z0-9_]
,在unicode下表示字符(包括中文)和數字和下劃線.+
是量詞,表示1個或多個,等價于{1,}
的寫法.()
表示子模式,體現在匹配結果中的$arr[1]里.
區別于主模式,體現在匹配結果中的$arr[0]里.
另外,也可以試試下面這個正則表達式:
%@(\S+)\s%
其中:
\s 匹配空白字符,包括:空格,制表符(\t,\v),回車(\r),換行(\n),換頁(\f),等價于[ \t\r\n\v\f]
\S 匹配除空白字符外的任意字符,等價于[^ \t\r\n\v\f]
另外:
preg_match: 返回模式的匹配次數,0次(不匹配)或1次,因為preg_match在第1次匹配后會停止搜索.
preg_match_all: 返回完整匹配次數,如果發生錯誤返回FALSE.
也就是說,如果上面的例子使用preg_match
,那只能匹配到字符串中的"張全蛋".
添加回答
舉報
0/150
提交
取消