RegEx:\ w - UTF-8中的"_"+" - "

Ali*_*xel 13 php regex unicode pcre utf-8

我需要一个匹配UTF-8字母和数字的正则表达式,破折号(-)但不匹配下划线(_),我尝试了这些愚蠢的尝试但没有成功:

  • ([\w-^_])+
  • ([\w^_]-?)+
  • (\w[^_]-?)+

\w是简写[A-Za-z0-9_],但如果我有u修饰符集,它也匹配UTF-8字符.

任何人都可以帮我解决这个问题吗?

gha*_*.st 18

试试这个:

(?:[\w\-](?<!_))+
Run Code Online (Sandbox Code Playgroud)

它对编码为\ w(或破折号)的任何内容进行简单匹配,然后具有零宽度的lookbehind,以确保刚刚匹配的字符不是下划线.

否则你可以选择这个:

(?:[^_\W]|-)+
Run Code Online (Sandbox Code Playgroud)

这是一种更基于集合的方法(注意大写W)

好吧,我在php的PCRE风格中使用unicode非常有趣:D Peekaboo说有一个简单的解决方案:

[\p{L}\p{N}\-]+
Run Code Online (Sandbox Code Playgroud)

\ p {L}匹配任何符合字母条件的unicode(注意:不是单词字符,因此没有下划线),而\ p {N}匹配任何看起来像数字的东西(包括罗马数字和更奇特的东西).
\ - 只是一个逃脱的破折号.虽然不是绝对必要的,但我倾向于在字符类中使用破折号...注意,在unicode中有许多不同的破折号,因此产生以下版本:

[\p{L}\p{N}\p{Pd}]+
Run Code Online (Sandbox Code Playgroud)

"Pd"是标点符号,包括但不限于我们的减号.(注意,这里再没有下划线).