从字符串中捕获两个正则表达式
Capture two regular expression from string
我有包含这个的字符串(其中数字是代表用户 ID 的整数)
@[calbert](3)
@[username](684684)
我想我需要以下内容来获取用户名和用户 ID
\((.*?)\)
和
\[(.*?)])
但是有没有办法同时获得两者?
和PHPreturns,是否可以只得到不带括号的结果(和用户名大小写中的括号)
Array
(
[0] => (3)
[1] => 3
)
\[([^\]]*)\]|\(([^)]*)\)
尝试this.See demo.You需要使用|
或operator.This提供正则表达式引擎,如果第一个失败则提供交替捕获组。
https://regex101.com/r/tX2bH4/31
$re = "/\[([^\]]*)\]|\(([^)]*)\)/im";
$str = " @[calbert](3)\n @[username](684684)";
preg_match_all($re, $str, $matches);
或者您可以使用您自己的正则表达式。 \((.*?)\)|\[(.*?)\])
通过积极的后瞻和前瞻断言。
(?<=\[)[^\]]*(?=])|(?<=\()\d+(?=\))
(?<=\[)
断言匹配之前必须有 [
个字符,
[^\]]*
匹配任何字符但不匹配 ]
零次或多次。
(?=])
断言匹配后必须跟有 ]
符号。
|
调用的逻辑 OR 运算符用于组合两个正则表达式。
我有包含这个的字符串(其中数字是代表用户 ID 的整数)
@[calbert](3)
@[username](684684)
我想我需要以下内容来获取用户名和用户 ID
\((.*?)\)
和
\[(.*?)])
但是有没有办法同时获得两者?
和PHPreturns,是否可以只得到不带括号的结果(和用户名大小写中的括号)
Array
(
[0] => (3)
[1] => 3
)
\[([^\]]*)\]|\(([^)]*)\)
尝试this.See demo.You需要使用|
或operator.This提供正则表达式引擎,如果第一个失败则提供交替捕获组。
https://regex101.com/r/tX2bH4/31
$re = "/\[([^\]]*)\]|\(([^)]*)\)/im";
$str = " @[calbert](3)\n @[username](684684)";
preg_match_all($re, $str, $matches);
或者您可以使用您自己的正则表达式。 \((.*?)\)|\[(.*?)\])
通过积极的后瞻和前瞻断言。
(?<=\[)[^\]]*(?=])|(?<=\()\d+(?=\))
(?<=\[)
断言匹配之前必须有[
个字符,[^\]]*
匹配任何字符但不匹配]
零次或多次。(?=])
断言匹配后必须跟有]
符号。|
调用的逻辑 OR 运算符用于组合两个正则表达式。