php - 正则表达式:\w - UTF-8 中的 "_"+ "-"

标签 php regex unicode utf-8 pcre

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

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

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

谁能帮我解决这个问题?

最佳答案

试试这个:

(?:[\w\-](?<!_))+

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

否则你可以选择这个:

(?:[^_\W]|-)+

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

好的,我在 PCRE 的 php 风格中使用 unicode 获得了很多乐趣 :D Peekaboo 说有一个简单的解决方案可用:

[\p{L}\p{N}\-]+

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

[\p{L}\p{N}\p{Pd}]+

其中“Pd”是标点破折号,包括但不限于我们的减破折号。 (注意,这里也没有下划线)。

关于php - 正则表达式:\w - UTF-8 中的 "_"+ "-",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062169/

相关文章:

PHP MySQL (PDO) CREATE TABLE 不创建表(实际上什么都不做)

php - 尝试在 Resource Laravel 中返​​回数据透视表数据

php - 使用一种形式将相同的输入发送到不同的操作

delphi - 口音编码

php - 从 PHP 页面即时更新 MySQL - AJAX?

regex - 过早退出 Perl File::Find

php正则表达式按[%%%]分割字符串

Ruby 将不可打印的字符转换为数字

c++ - 如何将重音字母 (wchar_t) 转换为 char?

c# - 如何编写组合字符的正则表达式?