一个错误我看到人们做了,并再次试图解析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)
你还知道其他什么问题?
我一直在考虑配置文件及其与代码的关系一段时间了,根据风的日期和方向,我的意见似乎发生了变化.虽然我不断回过头来学习Lisp时的第一次实现:数据和代码之间几乎没有什么区别.对配置文件来说,这似乎是双重的.从正确的角度来看,Perl脚本只不过是perl的配置文件.这往往会对QA和分工等任务造成相当严重的后果,例如谁应该负责更改配置文件.
从配置文件到完全成熟的语言的蠕变通常很慢,似乎是由拥有通用系统的愿望驱动的.大多数项目似乎从一些配置项开始很小,比如在哪里写日志,在哪里查找数据,用户名和密码等等.但随后它们开始增长:功能开始能够打开或关闭,操作的时间和顺序开始被控制,并且,不可避免地,有人想要开始向其添加逻辑(例如,如果机器是X则使用10,如果机器是Y则使用15).在某个时刻,配置文件成为特定于域的语言,并且在那时写得很差.
现在我已经漫步到舞台上,这是我的问题:
正如我之前所说,我对这些问题的回答不断变化,但现在我在想:
configuration programming-languages config configuration-files
我正在寻找一个图书馆或数据库,可以根据他或她的名字或昵称猜测一个人是男性还是女性.就像是
john => "M",
mary => "F",
alex => "A", #ambiguous
Run Code Online (Sandbox Code Playgroud)
我正在寻找支持英文名称以外的名字的东西(如日语,印度语等).
在我得到另一个答案之前,"你将通过假设他们的性别/性别冒犯别人"让我清楚,我的申请不会与任何人互动.无论如何,它不会发送电子邮件或联系任何人.没有用户要问.在许多情况下,有关人员已经死亡,我所拥有的唯一信息是姓名,出生日期和死亡日期.我想知道个人性别的原因是为了使输出的语法更好,并有助于可能的后期搜索.
如何使用各种语言解析HTML并解析库?
回答时:
个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.
为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式
语言:[语言名称]
图书馆:[图书馆名称]
[example code]
Run Code Online (Sandbox Code Playgroud)
请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:
目的:[解析的作用]
在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) 我知道我可以列出所有的包和lexcial变量在使用某个特定范围Padwalker的peek_our和peek_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) 我试图确定给定的标量是否包含文件句柄.它本来可以从一个裸字文件句柄(即\*FH),一个词法文件句柄,一个IO ::句柄,一个IO ::文件等传递给我.到目前为止,在各种风格中唯一似乎是一致的是它们都有reftype的"GLOB".
我目前正在记录所有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) ETA:当我问"你为什么不使用CPAN模块?"时,我指的是拒绝使用任何 CPAN模块的人(包括像DBI这样的高质量模块).并非所有的CPAN代码都具有高质量,并且可以远离那些微不足道的模块或基于实验代码的模板(前几天我因为想要引入Time :: Format而对开发人员感到恼火不知道strftime在POSIX中.
最近在Perl初学者身上,有人想要知道如何做而不采用通常为该功能建议的Perl模块.他或她不想从CPAN安装模块.这让我想到了我看到人们避免使用CPAN的原因,我想出了这种行为的五个原因以及每个原因的解决方案:
那么,如果你不使用CPAN,为什么,为什么上面的答案不够?注意,我不是在问你为什么不直接从CPAN安装生产盒子,我问你为什么要避免使用CPAN中的模块(通过包装系统安装就像使用CPAN一样).