我的 string_1 =" Noch befinden wir uns aber in der 1. Generation,所以dass diese institutionisierten Handlungsweisen nach wie vor durchschaubar und als menschliche Konstruktion ersichtlich sind。 Der Institutionalisierungsvorgang最初是Zuge der< \ i> Internalisierung< / i> der Folgegeneration durch die(Primä r)sozialisation,in der die kollektiven Wissensbestä nde als Teil der subjektiven Wirklichkeit verinnerlicht werden。 Erst hierdurch werden die Institutionen als Teil einer absolut wahrgenommenen objektiven Wirklichkeit angesehen。 Sie erhalten dadurch objektiven Charakter。 Diesen Vorgang der Vergegenstä ndlichung nennt Berger / Luckmann< \ i> Objektivation< / i>。 Der Eindruck eines menschlichen Erzeugnisses verschwindet。 Die Institutionen werden als naturgegebene,unhinterfragbare und nicht verä nderbare faktische Gegebenheiten angesehen,als kollektiv geteilte Wissensbestä nde。 Die Autoritä t der Institution an sich,die sich aus ihrer historisch bedingten Faktizitä t ergibt,sowie die Autorit& #x00E4; t der Bezugspersonen,die gesellschaftliche Institutionen,Normen und Verhaltensweisenü bermitteln ,fü hren dabei zu einem regelkonformen Handeln der Nachkommen(Berger / Luckmann< \ sup> 21< / sup> 2007,62-72)。 & #34;
我的 string_2 =" regelkonformen Handeln der Nachkommen(Berger / Luckmann 2007,62-72)。"
您可以看到以上两种情况, string_2 内容在 string_1 中可用,但唯一的区别是HTML标记。
我想匹配 string_1 中的 string_2 ,并且必须创建/复制 string_1 匹配区域内的标记 string_2 内容。
请任何人提出任何解决此问题的想法
由于 Vimal
答案 0 :(得分:3)
您可以尝试以下代码:
my @wordlist = split(/\s+/, $string_2);
s/([^\pN\pL])/sprintf("(?&sub)?%s(?&sub)?", quotemeta $1)/ge for @wordlist;
my $patterns = qr` (?(DEFINE)
(?<sctag> <(?!/)[^>]*+> ) # self closing tag
(?<fctag> </[^>]*+> ) # foreign closing tag
(?<comment> <!-- .*? --> )
(?<cdata> \Q<![CDATA[\E .*? ]]> )
(?<tag> <(\w++)[^>]*+> (?> [^<]++ | (?&all)
| (?!</\g{-1})(?&fctag) )*+ </\g{-1}> )
(?<all> \s++ | (?&tag) | (?&comment) | (?&cdata) | (?&sctag) )
(?<sub> (?> (?&all) | (?&fctag) )++ )
) `xsi;
my $search = join '(?&sub)', @wordlist;
if ($content =~ /$patterns (?<res>$search?)/xsi) {
print "\n$+{res}";
} else {
print "\nnot found";
}
想法是将string_2分割为白色字符以获得单词列表。词汇表中不是字母或数字的每个字符都会被转义(如果需要),并且包含对子模式(?&all)?
的可选引用。然后,所有项目都与(?&all)
一起加入。
然而,使用html解析器可能会更简洁。
答案 1 :(得分:1)
以下脚本在空白处拆分搜索字符串,然后在单词之间插入随机HTML的简化模式:
use strict;
use warnings;
my $string_1 = do {local $/; <DATA>};
my $string_2 = "regelkonformen Handeln der Nachkommen (Berger/Luckmann 2007, 62–72).";
# Build a regex to match HTML interjected at whitespace
my $string2_re = join '(?:\s+|<(\w+)\b.*?</\g{-1}>)+', map quotemeta, split ' ', $string_2;
if ($string_1 =~ /($string2_re)/) {
print "Matching = '$1'";
}
__DATA__
Noch befinden wir uns aber in der 1. Generation,
so dass diese institutionalisierten Handlungsweisen nach wie vor durchschaubar
und als menschliche Konstruktion ersichtlich sind. Der Institutionalisierungsvorgang
endet erst im Zuge der <i>Internalisierung</i> der Folgegeneration durch die
(Primär)sozialisation, in der die kollektiven Wissensbestände als Teil
der subjektiven Wirklichkeit verinnerlicht werden. Erst hierdurch werden die Institutionen
als Teil einer absolut wahrgenommenen objektiven Wirklichkeit angesehen. Sie erhalten
dadurch objektiven Charakter. Diesen Vorgang der Vergegenständlichung nennt
Berger/Luckmann <i>Objektivation</i>. Der Eindruck eines menschlichen Erzeugnisses
verschwindet. Die Institutionen werden als naturgegebene, unhinterfragbare und nicht
veränderbare faktische Gegebenheiten angesehen, als kollektiv geteilte
Wissensbestände. Die Autorität der Institution an sich, die sich aus ihrer
historisch bedingten Faktizität ergibt, sowie die Autorität der
Bezugspersonen, die gesellschaftliche Institutionen, Normen und Verhaltensweisen
übermitteln, führen dabei zu
einem regelkonformen Handeln der <a sdj="asdas"><sup>saddfsdfsad</sup></a> Nachkommen (Berger/Luckmann <sup>21</sup>2007, 62–72).
输出:
Matching = 'regelkonformen Handeln der <a sdj="asdas"><sup>saddfsdfsad</sup></a> Nachkommen (Berger/Luckmann <sup>21</sup>2007, 62–72).'
注意:昨天我回答了你的邮件:How to create tags from one content to another content using PERL。如果您要在互联网上发送垃圾邮件寻求帮助,请不要忘记检查是否有人回复。
答案 2 :(得分:0)
我会分两部分来做:发现和替换。
1:找到匹配,无论HTML标签如何(简单)
my $string_1="your big string <H1>to</H1> found here";
my $string_2="string to found";
my $match_str = $string_1;
#cleanup HTML tags for matching
$match_str =~ s!<[^>]*>!!gis;
#check if match could be found
if ($match_str =~ m!$string_2!i){
print "$string_2 found\n";
}
2:尝试提取原始字符串(硬)。这可能有效。
use Data::Dumper;
my $string_1="your big string <H1>to</H1> found here";
my $string_2="string to found";
my $se_string_2 = $string_2;
### replace every space with (?:\s*<[^>]*>\s*)+
$se_string_2 =~ s! !\(\?:\\s\*\<\[\^>\]\*\>\\s\*\)\+!gis;
print Dumper( $string_1,$string_2,$se_string_2);
#check if match could be found
while ($string_1 =~ s!($se_string_2)!!i){
print "$string_2 found, string with tags: $1\n";
}