php - 正则表达式只过滤大写辅音

标签 php regex

我正在参加在线培训正则表达式类(class)。
问题是

With regex you can count the number of matches. Can you make it return the number of uppercase consonants (B,C,D,F,..,X,Y,Z) in a given string? E.g.: it should return 3 with the text ABcDeFO!. Note: Only ASCII. We consider Y to be a consonant! Example: the regex /./g will return 3 when run against the string abc.`


我的解决方案是 /[BCDFGHJKLMNPQRSTVWXYZ]/g ( 26 个字符长)
我的另一个解决方案是 /(?![AEIOU])[A-Z]/g这是 19 长字符。但是根据网上的统计,最短的解是 16 长字符。任何想法如何做到这一点?

screenshot

最佳答案

我想我已经设法将正则表达式的长度降低到 16,你说这是所需的最小长度。

利用问题所说的事实,

Note: Only ASCII



无论您如何努力减少正则表达式的长度,正或负前瞻正则表达式都超出了长度。包括所有允许的大写辅音会导致 26 的长度太多了。

因此,唯一的方法似乎是使用否定字符类,其中一些我们如何巧妙地排除所有不需要的字符。这是正则表达式,它拒绝除大写辅音之外的所有 ASCII 字符。
[^ -AEIOU[-ÿ]
^将其标记为 A " -A" 的否定字符类和空格排除在 ASCII 表中看到的所有不需要的字符,因为它们不是必需的。然后我们取出E I O U具体然后,可以使用 [-ÿ 排除剩余的不需要的 ASCII 字符。范围,如 [字符紧跟在 Z 之后和 ÿ作为扩展 ASCII 字符中的最后一个字符。因此创建了上面的正则表达式,它只匹配大写辅音字符,不包括其余的所有 ASCII 字符。

此正则表达式的总长度 /[^ -AEIOU[-ÿ]/g如您所料,是 16。让我知道这是否适合您。

Demo

PHP代码,
$s = 'GAsSDITR';
preg_match_all(@'/[^ -AEIOU[-ÿ]/', $s, $matches);
echo count($matches[0]);

打印,
5

Online PHP Demo

关于php - 正则表达式只过滤大写辅音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54799576/

相关文章:

php 正则表达式匹配可能的重音字符

使用 re.match 的 Python 因长文本而挂起

java - 将零替换为单词中的字母 "o"

regex - 正则表达式匹配 a 与 z 和 b 与 y 的数量相同的字符串

php - 在 Mac OS X 上的 PHP 中启用 PostgreSQL 支持

php - Sql 字符串查询不起作用

php - 使用 PHP 的 XML RPC 连接

java - 只保留字母字符

php数组分层

php - 根据另一列的值检查一列中是否存在一组值