【发布时间】:2012-01-09 05:00:44
【问题描述】:
my (@keys,@values) = ($text =~ /\{IS\:([a-zA-Z0-9_-]+)\}(.*)\{\\IS\:([a-zA-Z0-9_-]+)\}/g);
应该匹配这样的字符串
{IS:cow}moo{\IS:cow}
{IS:cow}moo{\IS:cow}
{IS:dog}bark{\IS:dog}
{IS:dog}meow{\IS:dog} #probably not a dog
这很好,除了所有的 $1、$2 和 $3 值都被转储到 @keys 中......所以我试图弄清楚如何让这些家伙进入一个很好的 $1 => $2 对的哈希值...... .
对于完整的上下文,我真正想要做的是让正则表达式返回一个看起来像的数据结构(并附加一个计数找到密钥的次数)
{
cow_1 => moo,
cow_2 => moo,
dog_1 => bark,
dog_2 => meow,
}
有没有办法通过正则表达式使用 map{ } 函数来完成此任务?大概是这样的吧?
my %datahash = map { ( $1 eq $3 ) ? { $1 => $2 } : undef } @{ regex...};
$1 等于 $3 以确保它是一个匹配的标签(无需递归检查这些标签没有嵌套),如果是这样,则使用 $1 作为键和 $2 作为值;
然后对于这些键 => 值对中的每一个,我想替换
{IS:cow}moo{\IS:cow}
{IS:cow}moo{\IS:cow}
与
{cow_1}
{cow_2}
那么如果 $cachedData{cow} 为真,所有的 cow_* 都将被替换为它们在 %datahash 中的键...
【问题讨论】: