我昨天做了评论,其中有人曾用一个答案[0123456789]的正则表达式,而不是[0-9]或\d.我说使用范围或数字说明符比使用字符集更有效.
我决定今天测试一下,并且我惊讶地发现(至少在C#正则表达式引擎中)\d似乎效率低于其他两个似乎没有太大差别的.这是我的10000个随机字符串1000个随机字符的测试输出,其中5077实际上包含一个数字:
Regular expression \d took 00:00:00.2141226 result: 5077/10000
Regular expression [0-9] took 00:00:00.1357972 result: 5077/10000 63.42 % of first
Regular expression [0123456789] took 00:00:00.1388997 result: 5077/10000 64.87 % of first
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是有两个原因:
\d会比这更糟糕[0-9].还有\d简单的简写[0-9]吗?这是测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Text.RegularExpressions;
namespace SO_RegexPerformance
{
class Program
{
static void Main(string[] args)
{
var rand = new …Run Code Online (Sandbox Code Playgroud) 谁能解释\b和\w正则表达式元字符之间的区别?
据我所知,这两个元字符都用于字边界.除此之外,哪个元字符对多语言内容有效?
在过去几周阅读了一些问题/答案后,我看到\dperl正则表达式的使用被评论为不正确.正如在perl的更高版本中\d不同[0-9],因为\d它将表示具有digit属性的任何Unicode字符,并且[0-9]表示字符'0','1','2',...,'9'.
我理解在某些情况下[0-9]使用是正确的,在其他\d情况下也是如此.我想知道哪些人觉得默认使用是正确的?
我个人认为这种\d符号非常简洁和富有表现力,而相比之下[0-9]有点麻烦.但是我几乎没有做多语言代码的经验,或者说代码不适合ASCII字符范围的语言,因此可能是天真的.
我注意到
$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\\d' | wc -l
298
$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\[0-9\]' | wc -l
26
Run Code Online (Sandbox Code Playgroud) 我刚刚安装了Linux Mint 17并遇到了一个问题,我无法在终端中使用俄语.(我看到的?不是字母).在一个论坛上我发现了这个解决方案
在〜/ .profile中添加:
export LANG=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
Run Code Online (Sandbox Code Playgroud)
它有所帮助,但也将我的界面语言改为俄语(我不想要).这甚至不是问题,但无论如何,我想知道,这段代码是如何工作的(每一行).
谢谢.
Perl是否\w匹配Unicode标准中定义的所有字母数字字符?
例如,是否\w匹配所有(比方说)中文和俄文字母数字字符?
我写了一个简单的测试脚本(见下文),它表明\w我测试的非ASCII字母数字字符确实符合"预期".但测试显然远非详尽无遗.
#!/usr/bin/perl
use utf8;
binmode(STDOUT, ':utf8');
my @ok;
$ok[0] = "abcdefghijklmnopqrstuvwxyz";
$ok[1] = "éèëáàåäö??ž?í???øáý?óæš?ô?";
$ok[2] = "??ü??âi?ó?????íá??????????";
$ok[3] = "??????????????????????????";
$ok[4] = "??????????????????????????";
$ok[5] = "?????????????????????";
foreach my $ok (@ok) {
die unless ($ok =~ /^\w+$/);
}
Run Code Online (Sandbox Code Playgroud) regex unicode perl internationalization character-properties