0

我想创建一个正则表达式以仅匹配英文字母数字字符,但忽略(或丢弃)Ruby 中的孤立数字(如果可能的话,也可以在 JS 中)。

例子:

1)我希望匹配以下内容:

  • 4chan
  • 9gag
  • 测试91323432
  • asf5asdfaf35edfdfad
  • 阿法夫

但不是:

  • 92342424
  • 343424
  • 34432等..

以上正是我想要的。

编辑:我删除了第二个子问题。只关注第一个,非常感谢您的回答!!

抱歉,我的正则表达式技能不是很好(因此这个问题!)

谢谢你。

4

4 回答 4

1

您可以尝试以下表达式(适用于 Ruby 和 Javascript)

^(?!^\d+$)[[:alnum:]]+$

这首先通过使用否定前瞻确保字符串不仅仅是数字(?!^[0-9]+$),然后匹配一个或多个字母数字字符,支持 Unicode 字符,这意味着这也适用于法语字母。

编辑:如果你只想要英文字母:

^(?!^\d+$)\w+$

红色演示

于 2013-10-29T15:56:45.067 回答
1

对于任何拉丁字母:

/(?=.*\p{Alpha})\p{Alnum}+/
于 2013-10-29T16:03:46.297 回答
1

我很确定你不能用一个正则表达式做你想做的事。一组数字中的任何位置的单个字母字符都将使其成为有效匹配,并且无法在正则表达式中表示它,因为您真正要说的是“前面需要一个字母”这个词,但前提是中间或末尾没有字母”,而正则表达式不会这样做。

你最好的选择是做两次传球:

  1. 一个与您的字母数字匹配的字符,加上特殊的“法语”字符(模式:待定,基于您想要接受的特殊字符),以及
  2. 一个只匹配数字的(模式:将包括......[0-9]+需要有关具体情况的更多信息,以便为您提供最终的完整正则表达式)

您最终想要的值将需要通过第一个正则表达式并通过第二个正则表达式。

还 。. .

为了给你一个更好的答案,我们需要知道几件事:

  • 您是否正在测试整个字符串是否与模式匹配?
  • 您是否尝试在更大的字符串中捕获模式的单个实例?
  • 您是否试图在更大的字符串中捕获模式的所有实例?

这些问题的答案对您需要的最终正则表达式模式有很大影响。

而且,最后。. .

关于“法语”字符的注释。. . 您需要非常具体地确定哪些特殊字符可以接受,哪些不可以。正则表达式中特殊字符匹配的三种主要方法:组、加法和减法

  • 组 - 这些字符代表您正在使用的正则表达式版本中的一组预设字符。例如,\s匹配所有空格
  • 附加 - 这是在您的正则表达式中列出每个可接受的字符(或字符范围)的过程。当您有一小部分可接受的字符时,这会更好
  • 减法 - 这是在您的正则表达式中列出每个不可接受的字符(或字符范围)的过程。当您有一大群可接受的字符时,这会更好

如果你能弄清楚其中一些问题,我们应该能给你一个更好的答案。

于 2013-10-29T16:41:10.930 回答
0

也许这 ^(?![0-9]+$)[a-zA-Z0-9\x80-\xa5]+$

编辑 - 修复了剪切和粘贴错误并添加了\x80-\xa5
包含重音字符的扩展字符范围(取决于区域设置,数字可能会有所不同)

于 2013-10-29T16:00:25.457 回答