使用php preg_match_all()捕获后跟@character的UUID
如何使用使用php preg_match_all()捕获后跟@character的UUID,php,regex,string,preg-match-all,Php,Regex,String,Preg Match All,如何使用preg_match_all()在以下字符串中获取1a1a-1a1a和2B2B2-B2: $string = 'Hello @1a1a-1a1a and @2B2B2-B2 too'; 我的目标是捕获每个@,后跟一个uuid 我试过: preg_match_all("/@(.*)/", $string, $matches); preg_match_all("/@.*?/U", $string, $matches); preg_match_all("/@([^\"]+)/si", $a
preg_match_all()
在以下字符串中获取1a1a-1a1a
和2B2B2-B2
:
$string = 'Hello @1a1a-1a1a and @2B2B2-B2 too';
我的目标是捕获每个@
,后跟一个uuid
我试过:
preg_match_all("/@(.*)/", $string, $matches);
preg_match_all("/@.*?/U", $string, $matches);
preg_match_all("/@([^\"]+)/si", $a, $matches);
但是不能使用
/(?使用/(?您的正则表达式匹配:
@(.*)
匹配@并在组中捕获任何字符0+次,包括将匹配示例中所有字符的空格
@.*?
匹配@,后跟任何字符0+次非贪婪,该字符只匹配@
@([^\“]+)
匹配@并在组中捕获匹配的内容,而不是与示例中的所有内容匹配的“
要捕获后跟uuid的每个@
,您可以使用列出您允许匹配的内容,并在非捕获组中重复该模式1+次
如果只想匹配uuid,可以在捕获组中捕获值
@([a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)+)
结果
Array
(
[0] => 1a1a-1a1a
[1] => 2B2B2-B2
)
您的正则表达式ar匹配:
@(.*)
匹配@并在组中捕获任何字符0+次,包括将匹配示例中所有字符的空格
@.*?
匹配@,后跟任何字符0+次非贪婪,该字符只匹配@
@([^\“]+)
匹配@并在组中捕获匹配的内容,而不是与示例中的所有内容匹配的“
要捕获后跟uuid的每个@
,您可以使用列出您允许匹配的内容,并在非捕获组中重复该模式1+次
如果只想匹配uuid,可以在捕获组中捕获值
@([a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)+)
结果
Array
(
[0] => 1a1a-1a1a
[1] => 2B2B2-B2
)
@(.*)
正则表达式匹配一个@
,贪婪地匹配除换行符以外的任何0个或更多字符(即行的其余部分)。/.*/U
是同义模式,它等于/./
,
之后的文本不会被捕获到组中。@([^\”+)
匹配@
并将“
以外的任何一个或多个字符捕获到组1中,这些字符要么匹配到第一个”
,要么匹配到字符串末尾(如果没有”
)
我建议使用
preg_match_all('~@\K[\w-]+~', $s, $matches)
请参阅。@\K[\w-]+
将匹配@
,\K
将从匹配中删除它,并且[\w-]+
将匹配将返回的一个或多个单词或-
字符
要使模式更具限制性,例如,仅匹配可以连字符分隔的@
后面的字母或数字,可以使用
'~@\K[A-Z0-9]+(?:-[A-Z0-9]+)*~i'
请参见。此处,[A-Z0-9]+
匹配1个或多个字母数字字符,(?:-[A-Z0-9]+*)
将匹配0个或多个重复的-
,后跟1+字母数字字符。i
修饰符将使模式不区分大小写。@(.*)
regex匹配一个@
和除换行符以外的任何0个或更多字符(即行的其余部分)。/.*?/U
是一个同义模式,它等于/.*/
,@
之后的文本不会被捕获到组中。@([^\“]+)
匹配@
并将“
以外的任何一个或多个字符捕获到组1中,这些字符要么匹配到第一个”
,要么匹配到字符串末尾(如果没有”
)
我建议使用
preg_match_all('~@\K[\w-]+~', $s, $matches)
请参阅。@\K[\w-]+
将匹配@
,\K
将从匹配中删除它,并且[\w-]+
将匹配将返回的一个或多个单词或-
字符
要使模式更具限制性,例如,仅匹配可以连字符分隔的@
后面的字母或数字,可以使用
'~@\K[A-Z0-9]+(?:-[A-Z0-9]+)*~i'
请参见。此处,[A-Z0-9]+
匹配1个或多个字母数字字符,(?:-[A-Z0-9]+*)
将匹配0个或多个重复的-
字符,后跟1个以上字母数字字符。i
修饰符将使模式不区分大小写。尝试此操作,它将捕获“@”之后的所有字符,无论有多少个字符
preg_match_all(“@(\w)*/”,$string,$matches)试试这个,不管有多少个字符,它都会捕获“@”之后的所有内容
preg_match_all(“@(\w)*/”,$string,$matches)使用preg_match_all(“/\K[\w-]+/”,$a,$matches);
您的正则表达式太松散了。您需要让模式在某个点停止。您可以使用@\S+
它将一直运行,直到找到一个空格。或者更高的正则表达式也应该可以工作。使用preg_match_all(“/\K[\w-]””,$a,$matches);
您的正则表达式太松散。您需要让模式在某个点停止。您可以使用@\S+
,它将一直运行,直到找到一个空格。..或更高的正则表达式也可以工作。