我有包含此字符串的字符串(其中数字是表示用户ID的整数)
@[calbert](3)
@[username](684684)
我想我需要以下内容来获取用户名和用户ID
\((.*?)\)
和
\[(.*?)])
但有没有办法同时获得两者?
并且PHP返回,是否可能只获得没有括号的结果(以及用户名中的括号)
Array
(
[0] => (3)
[1] => 3
)
答案 0 :(得分:3)
\[([^\]]*)\]|\(([^)]*)\)
试试这个。看看demo.You需要使用|
或operator.This提供正则表达式引擎,以便在第一个失败时提供交替捕获组。
https://regex101.com/r/tX2bH4/31
$re = "/\\[([^\\]]*)\\]|\\(([^)]*)\\)/im";
$str = " @[calbert](3)\n @[username](684684)";
preg_match_all($re, $str, $matches);
或者您可以使用自己的正则表达式。 \((.*?)\)|\[(.*?)\])
答案 1 :(得分:0)
通过积极的观察和先行断言。
(?<=\[)[^\]]*(?=])|(?<=\()\d+(?=\))
(?<=\[)
断言匹配必须以[
字符开头,
[^\]]*
匹配任何字符,但不匹配]
零次或多次。
(?=])
断言匹配必须后跟]
符号。
|
被调用的逻辑OR运算符用于组合两个正则表达式。