小编Cha*_*ens的帖子

您能否举例说明为什么用正则表达式解析XML和HTML很困难?

一个错误我看到人们做,并再次试图解析XML或HTML用正则表达式.以下是解析XML和HTML很难的几个原因:

人们希望将文件视为一系列行,但这是有效的:

<tag
attr="5"
/>
Run Code Online (Sandbox Code Playgroud)

人们希望将<或<tag视为标记的开头,但是这样的东西存在于野外:

<img src="imgtag.gif" alt="<img>" />
Run Code Online (Sandbox Code Playgroud)

人们通常希望将起始标记与结束标记匹配,但XML和HTML允许标记包含自身(传统的正则表达式根本无法处理):

<span id="outer"><span id="inner">foo</span></span> 
Run Code Online (Sandbox Code Playgroud)

人们通常希望匹配文档的内容(例如着名的"查找给定页面上的所有电话号码"问题),但数据可能会被标记(即使在查看时看起来是正常的):

<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>
Run Code Online (Sandbox Code Playgroud)

评论可能包含格式不正确或不完整的标记:

<a href="foo">foo</a>
<!-- FIXME:
    <a href="
-->
<a href="bar">bar</a>
Run Code Online (Sandbox Code Playgroud)

你还知道其他什么问题?

html regex xml

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

配置文件在什么时候成为编程语言?

我一直在考虑配置文件及其与代码的关系一段时间了,根据风的日期和方向,我的意见似乎发生了变化.虽然我不断回过头来学习Lisp时的第一次实现:数据和代码之间几乎没有什么区别.对配置文件来说,这似乎是双重的.从正确的角度来看,Perl脚本只不过是perl的配置文件.这往往会对QA和分工等任务造成相当严重的后果,例如谁应该负责更改配置文件.

从配置文件到完全成熟的语言的蠕变通常很慢,似乎是由拥有通用系统的愿望驱动的.大多数项目似乎从一些配置项开始很小,比如在哪里写日志,在哪里查找数据,用户名和密码等等.但随后它们开始增长:功能开始能够打开或关闭,操作的时间和顺序开始被控制,并且,不可避免地,有人想要开始向其添加逻辑(例如,如果机器是X则使用10,如果机器是Y则使用15).在某个时刻,配置文件成为特定于域的语言,并且在那时写得很差.

现在我已经漫步到舞台上,这是我的问题:

  1. 配置文件的真正目的是什么?
  2. 是否应该尝试保持配置文件简单?
  3. 谁应该负责对它们进行更改(开发人员,用户,管理员等)?
  4. 它们应该是源控制的吗(参见问题3)?

正如我之前所说,我对这些问题的回答不断变化,但现在我在想:

  1. 允许非程序员快速更改大块行为
  2. 是的,任何非粗粒度的东西都应该是代码
  3. 用户应负责配置文件,程序员应负责配置文件和代码之间的配置层,以便对应用程序进行更精细的控制
  4. 不,但细粒度的中间层应该是

configuration programming-languages config configuration-files

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

有没有人知道有一个好的图书馆可以将一个人的名字映射到他或她的性别?

我正在寻找一个图书馆或数据库,可以根据他或她的名字或昵称猜测一个人是男性还是女性.就像是

john => "M",
mary => "F",
alex => "A", #ambiguous
Run Code Online (Sandbox Code Playgroud)

我正在寻找支持英文名称以外的名字的东西(如日语,印度语等).

在我得到另一个答案之前,"你将通过假设他们的性别/性别冒犯别人"让我清楚,我的申请不会与任何人互动.无论如何,它不会发送电子邮件或联系任何人.没有用户要问.在许多情况下,有关人员已经死亡,我所拥有的唯一信息是姓名,出生日期和死亡日期.我想知道个人性别的原因是为了使输出的语法更好,并有助于可能的后期搜索.

database language-agnostic

90
推荐指数
6
解决办法
3万
查看次数

你能提供解析HTML的例子吗?

如何使用各种语言解析HTML并解析库?


回答时:

个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.

为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式

语言:[语言名称]

图书馆:[图书馆名称]

[example code]
Run Code Online (Sandbox Code Playgroud)

请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:

目的:[解析的作用]

html language-agnostic html-parsing

69
推荐指数
15
解决办法
3万
查看次数

Perl 5中父级和基础有什么区别?

似乎有一个新的pragma命名parent与大致相同的东西base.这样parent做可以保证一个新的(非核心)模块?我错过了什么?

perl subclass pragma

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

在Perl 5中,我如何获得向我发送信号的过程的pid?

在C中,我可以说

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int continue_running = 1;

void handler(int signal, siginfo_t* info, void* data) {
    printf("got signal %d from process %d running as user %d\n",
        signal, info->si_pid, info->si_uid);
    continue_running = 0;
}


int main(int argc, char** argv) {
    struct sigaction sa;
    sigset_t mask;

    sigemptyset(&mask);

    sa.sa_sigaction = &handler;
    sa.sa_mask      = mask;
    sa.sa_flags     = SA_SIGINFO;

    sigaction(SIGTERM, &sa, NULL);

    printf("pid is %d\n", getpid());

    while (continue_running) { sleep(1); };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这打印出类似的东西

pid is 31980
got signal 15 from …
Run Code Online (Sandbox Code Playgroud)

perl signals

38
推荐指数
1
解决办法
1530
查看次数

如何列出给定范围内的所有变量?

我知道我可以列出所有的包和lexcial变量在使用某个特定范围Padwalkerpeek_ourpeek_my,但我怎么能得到像全局变量的名称和值$"$/

#!/usr/bin/perl

use strict;
use warnings;

use PadWalker qw/peek_our peek_my/;
use Data::Dumper;

our $foo = 1;
our $bar = 2;

{
    my $foo = 3;
    print Dumper in_scope_variables();
}

print Dumper in_scope_variables();

sub in_scope_variables {
    my %in_scope = %{peek_our(1)};
    my $lexical  = peek_my(1);
    #lexicals hide package variables
    while (my ($var, $ref) = each %$lexical) {
        $in_scope{$var} = $ref;
    }
    ##############################################
    #FIXME: need to add globals to %in_scope here#
    ##############################################
    return …
Run Code Online (Sandbox Code Playgroud)

perl

31
推荐指数
3
解决办法
1万
查看次数

确定标量是否包含文件句柄的最佳方法是什么?

我试图确定给定的标量是否包含文件句柄.它本来可以从一个裸字文件句柄(即\*FH),一个词法文件句柄,一个IO ::句柄,一个IO ::文件等传递给我.到目前为止,在各种风格中唯一似乎是一致的是它们都有reftype"GLOB".

perl

29
推荐指数
3
解决办法
3602
查看次数

Perl 5中存在哪些伪运算符?

我目前正在记录所有Perl 5的运算符(参见perlopref GitHub项目),我也决定包含Perl 5的伪运算符.对我来说,Perl中的伪运算符是任何看起来像运算符的东西,但实际上不仅仅是一个运算符或其他一些语法.我已经记录了我熟悉的四个:

  • ()= 算子的数量
  • =()= goatse/countof运算符
  • ~~ 标量上下文运算符
  • }{ 爱斯基摩吻操作员

这些伪运算符还有哪些其他名称,你知道我错过了哪些伪运算符吗?

=head1 Pseudo-operators

There are idioms in Perl 5 that appear to be operators, but are really a
combination of several operators or pieces of syntax. These pseudo-operators
have the precedence of the constituent parts.

=head2 ()= X

=head3 Description

This pseudo-operator is the list assignment operator (aka the countof
operator).  It is made up of two items C<()>, and C<=>.  In scalar context
it returns the …
Run Code Online (Sandbox Code Playgroud)

perl operators

27
推荐指数
2
解决办法
1482
查看次数

为什么不使用CPAN模块?

ETA:当我问"你为什么不使用CPAN模块?"时,我指的是拒绝使用任何 CPAN模块的人(包括像DBI这样的高质量模块).并非所有的CPAN代码都具有高质量,并且可以远离那些微不足道的模块或基于实验代码的模板(前几天我因为想要引入Time :: Format而对开发人员感到恼火不知道strftime在POSIX中.

最近在Perl初学者身上,有人想要知道如何做而不采用通常为该功能建议的Perl模块.他或她不想从CPAN安装模块.这让我想到了我看到人们避免使用CPAN的原因,我想出了这种行为的五个原因以及每个原因的解决方案:

  1. 他们吓唬你(回答,克服它)
  2. 他们吓唬你的系统管理员(回答,通过在你的主目录中安装并使用lib pragma解决它们)
  3. 您正在使用托管服务,阻止您安装模块(回答,获得更好的服务,有廉价的服务,不像白痴)
  4. 目标机器不一定有所需的模块(答案,使用PAR或PAR :: Packer)
  5. 目标机器被完全锁定(即你登录到rbash并且必须向第三方提供代码以包含在盒子中)(4和通过官僚机构的组合)
  6. 您正在使用无法加载模块的嵌入式Perl版本(没有答案,您被卡住,但这种情况非常罕见)

那么,如果你不使用CPAN,为什么,为什么上面的答案不够?注意,我不是在问你为什么不直接从CPAN安装生产盒子,我问你为什么要避免使用CPAN中的模块(通过包装系统安装就像使用CPAN一样).

perl cpan

23
推荐指数
6
解决办法
2367
查看次数