我正在开发一个laravel应用程序,用户可以通过将其用户名设置为适当的形式来引用他的个人资料。
让我们看一个例子:
名为John的用户可以使用以下文本引用他的个人资料:@John
我花了几个小时试图了解正则表达式是如何工作的,但这种模式是我到目前为止的地方:@([A-Za-z0-9]+)
此模式与上面的示例完全匹配,但它也匹配通常不应该使用的其他格式。
我需要一些帮助来创造完美的模式。
它应该只匹配以@符号开头的字符串。 例如:@ John,@ Sam,@ Bill等
它不应与不以@符号开头的字符串匹配。 例如:@ John,@ Sam,123 @ Bill等等。
它还应匹配包含多个@符号的格式。 例如:@ John @,@ Sam @ something,@ Bill @@ sometext等。 在这种情况下,模式应该捕获:John @,Sam @ something,Bill @@ sometext
感谢您的帮助,抱歉我的英语不好。
答案 0 :(得分:4)
答案 1 :(得分:0)
你的正则表达式几乎是正确的。 首先,你想说你的正则表达式也应该匹配字符串的开头。你可以用插入符号(^)来实现它:
^@([A-Za-z0-9]+)
其次,您希望能够将@符号放入其中。现在它很简单 - 只需在括号内添加该符号即可。
^@([A-Za-z0-9@]+)
答案 2 :(得分:-1)
尝试/(?:\s@{1,3})([a-zA-Z@.]+)/i
<强>解释强>
@ Character。匹配&#34; @&#34;字符(字符代码64)。 {1,3}量词。匹配前面标记的1到3之间。
\ w Word。匹配任何单词字符(字母数字和下划线)。 +加号。匹配前面标记中的1个或多个。
这是regexr:http://regexr.com/3djhq