相关疑难解决方法(0)

\ d效率低于[0-9]

我昨天做了评论,其中有人曾用一个答案[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)

令我惊讶的是有两个原因:

  1. 我原以为该范围的实施要比套装更有效.
  2. 我无法理解为什么\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)

c# regex performance

1214
推荐指数
4
解决办法
8万
查看次数

\ w和\ b正则表达式元字符之间的区别

谁能解释\b\w正则表达式元字符之间的区别?

据我所知,这两个元字符都用于字边界.除此之外,哪个元字符对多语言内容有效?

javascript php java regex perl

133
推荐指数
4
解决办法
18万
查看次数

我应该使用\ d或[0-9]来匹配Perl正则表达式中的数字吗?

在过去几周阅读了一些问题/答案后,我看到\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)

regex perl

47
推荐指数
4
解决办法
3万
查看次数

解释export LANG,LC_CTYPE,LC_ALL的效果

我刚刚安装了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)

它有所帮助,但也将我的界面语言改为俄语(我不想要).这甚至不是问题,但无论如何,我想知道,这段代码是如何工作的(每一行).

谢谢.

linux

42
推荐指数
4
解决办法
4万
查看次数

\ w是否匹配Unicode标准中定义的所有字母数字字符?

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

11
推荐指数
2
解决办法
1万
查看次数