以简单的方式包含重音字符有什么好的正则表达式?

Exn*_*Exn 8 regex

现在我的正则表达式是这样的:

[a-zA-Z0-9]但它不包括我想要的重音字符.我也想 - ',包括在内.

zx8*_*x81 14

重音字符:DIY字符范围减法

如果你的正则表达式引擎允许它(很多人会),这将有效:

(?i)^(?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ])+$
Run Code Online (Sandbox Code Playgroud)

请参阅演示(您可以添加要测试的字符).

说明

  • (?i) 设置不区分大小写的模式
  • ^锚断言,我们是在字符串的开头
  • (?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ]) 匹配一个字符......
  • 前瞻(?![×Þß÷þø])断言,char不是括号中的char之一
  • [-'0-9a-zÀ-ÿ] 允许在宽重音范围内使用短划线,撇号,数字,字母和字符,我们需要从中减去
  • +场比赛是一次或多次
  • $锚断言,我们是在字符串的结束

参考

扩展的ASCII表


Nig*_*der 14

你只需输入你的表达:

\p{L}\p{M}
Run Code Online (Sandbox Code Playgroud)

这在 Unicode 中将匹配:

  • 来自任何语言的任何字母字符 (L)
  • 和标记 (M)(即要与另一个字符组合的字符:重音等)

  • 这才是真正的正确答案! (2认同)
  • 您缺少 /u - 完整的正则表达式是 `/\p{L}+|\p{M}+/ugm` https://regex101.com/r/H59XSX/1 (2认同)

小智 6

没有排除规则的版本:

\n\n
^[-\'a-zA-Z\xc3\x80-\xc3\x96\xc3\x98-\xc3\xb6\xc3\xb8-\xc3\xbf]+$\n
Run Code Online (Sandbox Code Playgroud)\n\n

解释

\n\n
    \n
  • ^断言我们位于字符串的开头
  • \n
  • [...]允许在较宽的重音范围内使用破折号、撇号、\n数字、字母和字符,
  • \n
  • 匹配+一次或多次
  • \n
  • $断言我们位于字符串的末尾
  • \n
\n\n

参考

\n\n\n

  • 请注意,这会遗漏许多重音字符,包括 ב、ā、ć、n̈ 和 ō。它还包括 OP 可能不一定需要的字符,例如 æ、Æ、Þ、þ、ß 和 ø。参见 https://regex101.com/r/gY7rO4/263 (4认同)

chi*_*tte 5

@NightCoder 的答案在 PHP 中完美运行:

\n
    \\p{L}\\p{M}\n
Run Code Online (Sandbox Code Playgroud)\n

并且没有脆弱的白名单。请注意,要使其在 javascript 中工作,您需要添加 unicodeu标志。在 javascript 中有一个工作示例很有用...

\n
const text = `Cr\xc3\xaapes are \xc3\xb8h-so d\xc3\xa9class\xc3\xa9e`\n[ ...text.matchAll(  /[-\'\xe2\x80\x99\\p{L}\\p{M}\\p{N}]+/giu  ) ]\n
Run Code Online (Sandbox Code Playgroud)\n

会返回类似...

\n
[\n    {\n        "0": "Cr\xc3\xaapes",\n        "index": 0\n    },\n    {\n        "0": "are",\n        "index": 7\n    },\n    {\n        "0": "\xc3\xb8h-so",\n        "index": 11\n    },\n    {\n        "0": "d\xc3\xa9class\xc3\xa9e",\n        "index": 17\n    }\n]\n
Run Code Online (Sandbox Code Playgroud)\n

这是在操场上...... https://regex101.com/r/ifgH4H/1/

\n

还有关于这些正则表达式 unicode 类别的一些详细信息... https://javascript.info/regexp-unicode

\n