我正在cpan install XML::LibXML尝试安装XML::LibXML解析器,但它不会通过。它给出了以下错误:
cc -c -I/usr/include/libxml2 -fno-common -DPERL_DARWIN -mmacosx-version-min=10.14 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3 -DVERSION=\"2.0201\" -DXS_VERSION=\"2.0201\" "-I/usr/local/Cellar/perl/5.28.1/lib/perl5/5.28.1/darwin-thread-multi-2level/CORE" -DHAVE_UTF8 Devel.c
In file included from Devel.xs:28:
/usr/local/include/libxml/xmlmemory.h:16:10: fatal error: 'libxml/xmlversion.h'
file not found
#include <libxml/xmlversion.h>
^~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [Devel.o] Error 1
SHLOMIF/XML-LibXML-2.0201.tar.gz
/usr/bin/make -- NOT OK
Run Code Online (Sandbox Code Playgroud)
更新:
在我手动将“开发”文件复制到后/usr/local/include/libxml,file not found错误现在消失了,但仍然无法编译XML-LibXML。
更详细的信息:
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/Users/chris/.cpan/Metadata'
Database was generated on Fri, 05 …Run Code Online (Sandbox Code Playgroud) 如果两个字符串都包含空格或都不包含空格,请执行某些操作。
my $with_spaces = $a =~ / / and $b =~ / /;
my $no_spaces = $a !~ / / and $b !~ / /;
if ($with_spaces or $no_spaces) {
dosomething();
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码给出了一个错误:
在无效上下文中无用的否定模式绑定(!〜)。
我在这里做错了吗?
在以下 HTML 片段中:
<div><p class="a b c"></p> <p class="a c"></p> <p class="d"></p> </div>
我只想使用选择器选择第二个p元素(带a类和不带b类)not,如下所示:
p.a:not(.b)
xpath对应的是
.//p[contains(concat(' ', normalize-space(@class), ' '), ' a ')][not(self::*[contains(concat(' ', normalize-space(@class), ' '), ' b ')])].
但是当我使用该 xpath 表达式时,它无法定位该元素。
还有什么可以用来实现not选择器的效果吗?
更新:似乎我犯了一个错误,因为p.a:not(.b)它的 xpath 对应物似乎对XML::LibXML.
它没有用,因为我if弄错了一个条件......
我有一个格式像这样的文件:
Eye color
<p class="ul">Eye color, color</p> <p class="ul1">blue, cornflower blue, steely blue</p> <p class="ul1">velvet brown</p> <link rel="stylesheet" href="a.css">
</>
weasel
<p class="ul">weasel</p> <p class="ul1">musteline</p> <link rel="stylesheet" href="a.css">
</>
Run Code Online (Sandbox Code Playgroud)
<p class="ul1">分隔符内的每个单词,都应包裹在一个<a>标签中,如下所示:
Eye color
<p class="ul">Eye color, color</p> <p class="ul1"><a href="entry://blue">blue</a>, <a href="entry://cornflower blue">cornflower blue</a>, <a href="entry://steely blue">steely blue</a></p> <p class="ul1"><a href="entry://velvet brown">velvet brown</a></p> <link rel="stylesheet" href="a.css">
</>
weasel
<p class="ul">weasel</p> <p class="ul1"><a href="entry://musteline">musteline</a></p> <link rel="stylesheet" href="a.css">
</>
Run Code Online (Sandbox Code Playgroud)
<p class="ul1">标签内可能有一个或几个单词。
单线可能Perl吗?
提前致谢。任何帮助表示赞赏。
我有这个perl代码,基本上可以读取每一行以找到特定的模式。针对第一条if语句指定的模式,我需要从该模式中提取一些子字符串,因此需要第二条if语句。查看输出,我发现结果不是很正确,两个if的结果之间有些绑定错误。是第二个if从第一行开始读取同一行if吗?如果没有,如何第二秒钟读取同一行if?
open(DICT, "<", $file)
or die "Cannot open '$file': $!";
my %h;
while (<DICT>) {
if (/(<p class="calibre_\d+">\s*?\d+\.\s*?(?:(?!<p).)*<\/p>)/) {
my $entry = $1;
if (/<p class="calibre_\d+">\s*?\d+\.\s*?\K([a-zA-Z][a-zA-Z\-_\s'’?“”=…\)()]+[a-zA-Z'\-’])/) {
my $hw = $1;
$h{$entry} = $hw;
}
}
END{
while (my ($k, $v) = each %h) {
print qq{$v\n$k\n</>\n}
}
}
}
Run Code Online (Sandbox Code Playgroud)
源文本文件是这样的:
A
<div class="notes"><p class="calibre_2"> ??</p><p class="calibre_2"> 1.abc ??</p>
</>
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
abc
<p class="calibre_2"> 1.abc ??</p>
</>
Run Code Online (Sandbox Code Playgroud)
也就是说,对于所有标签 …
我正在尝试从文本文件中的BEGIN块中获取某些特定模式的数据,并将其打印在END块中,如下所示:
perl -0777wnE'
BEGIN{
while(/<mark>(.*?)<\/mark>/g){
$hw=$1;
$seen{$hw}++;
}
}
END{
for $key (keys %seen){
say "$key";
}
}
' "demo.txt" > "demo2.txt"
Run Code Online (Sandbox Code Playgroud)
但是它不会将任何内容打印到demo2.txt文件中,并且会发出以下警告:
在-e第3行的模式匹配(m //)中使用未初始化的值$ _。
但是,如果我将while块放在block之外BEGIN,像这样:
perl -0777wnE'
while(/<mark>(.*?)<\/mark>/g){
$hw=$1;
$seen{$hw}++;
}
END{
for $key (keys %seen){
say "$key";
}
}
' "demo.txt" > "demo2.txt"
Run Code Online (Sandbox Code Playgroud)
然后得到预期的结果。
就像在这个 HTML 片段中一样:
元素<div class="c1"><span class="c2"><b class="c3"/></span></div>
的预期层次结构b应该是:div.c1 span.c2 b.c3