【问题标题】:Regular expression for name [closed]名称的正则表达式 [关闭]
【发布时间】:2012-04-20 16:19:59
【问题描述】:

我需要一个正则表达式来匹配帐户登录。

我想匹配的符号:

Test
testtest
Special Char Testó
Special Char Test
Test Test
Hai hai
Test-ó
Test.ó
Testó
Another Test 12345
Another.Test.12345

我找到的最接近的正则表达式是:^(?=[^ ])[a-zA-Z0-9 +&-]+(?<=\S)$。但它仍然与上述所有示例都不匹配。

实时预览:http://regexr.com?30ncg

以下是它不应该匹配的所有符号:

Test?
Test$
Test= (and all special characters like those @#$%^&*=).
Test[]
Test>
Test<
  • 所以它基本上可以找到,但它与 Another.Test.12345Special Char Testó 之类的词不匹配。

我希望它只匹配单词字符(包括特殊字符,如ółążźćęąäöüß)、数字、点和空格。

我搜索了很多,但在上面给出的示例中没有找到比这个更好的正则表达式。

【问题讨论】:

  • The symbols I would like to match: ... 全部。
  • 我不明白这个问题如何已经获得了三个支持 - 您需要详细说明您想要实现的目标。你的输入集是什么?您要究竟匹配什么?到目前为止,您所说的只是“我想匹配所有符号”。那么,您正在寻找(.*)
  • 有趣的是,您使用与 this 问题相同的正则表达式链接,由另一个用户提出...
  • @Cyclone .+ 会匹配所有这些,但它也会(我猜)匹配你不想匹配的东西。就像我说的,应该排除什么?
  • 不狡猾,只是想知道你为什么要在不同的登录名下发布相同的问题。

标签: php regex preg-match


【解决方案1】:

如果您只想匹配问题中列出的字符,则应使用此正则表达式:

/(?:\A|(?<=[^a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s]))([a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s]+)(?:(?=[^a-zA-Z0-9\+\&\-ółążźćęąäöüß\.\s])|\z)/

但是,由于这个问题对我(以及许多其他用户)来说有点不清楚,我建议您使用匹配所有“字母类”单代码 unicode 字符和您的一些特殊字符的正则表达式人物。这样的正则表达式将是:

/(?:\A|(?<=[^\p{L}\+\-\&\.\s]))([\p{L}\+\-\&\.\s]+)(?:(?=[^\p{L}\+\-\&\.\s])|\z)/

【讨论】:

  • 看起来不错!谢谢。
  • 其他非 ASCII unicode 字符呢?
  • @JackManey - 我将 OP 要求匹配的正则表达式字符集放入其中,所以您能否更具体地说明您的意思或建议?谢谢。
  • 目前还不是很清楚 OP 想要匹配什么...
  • @JackManey - 你是对的,我们都这么认为 - 我刚刚在我的(更新的)答案中为他添加了一个建议。你现在看起来更好吗?
【解决方案2】:

[注意] 在发布此内容之前,我没有阅读您的编辑。

我假设您使用的是 PHP。这对我有用:

$a = 'Test
testtest
Special Char TestóááÓ
Special Char Testß
Test Test
Hai hai
Test-ó
Test.ó
Testó
Another Test 12345
Another.Test.12345';

preg_match_all('/^(?=[^ ])[\w \.-\p{L}]+$/m', $a, $ms);

var_dump($ms);

它匹配所有行。 \p{L} 将匹配在 http://php.net/manual/en/regexp.reference.unicode.php 上读取的 unicode 字符

【讨论】:

  • 实际上 \p{L} 会匹配很多 OP 没有要求的字符 - 它会匹配所有 "letter" 类 unicode 单码字符,例如所有西班牙语拉丁字符、法语、意大利语等...
  • 是的,我正在使用 PHP,但是为什么它在这里不起作用 gskinner.com/RegExr/?30nc4
猜你喜欢
  • 2012-06-28
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2021-07-10
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多