簡體   English   中英

perl正則表達式,用於將多個匹配項替換為相應的替換項

[英]perl regex for replacing multiple matches with corresponding replacements

在此處輸入圖片說明

我想這樣替換每個匹配項:

fn.doc(
fn.collection(
fn.distinctValues(   # convert to camelcase also

我可以使用正則表達式找到匹配項,但不確定如何替換。這是正則表達式(\\w+)(:)(\\w+-\\w+\\()|(\\w+)(:)(\\w+\\() http://regex101.com/r/kD9zG8

預期產量:

let $local-config := fn.doc($alert-action)/alert:action/alert:name
let $local-coll := fn.collection($uri)/alert:action/alert:name
let $global-coll := fn.distinctValues(fn.collection($global-uri)/alert:action/alert:name[../alert:name = 'ml_alert_action_17_01_action'])

請幫忙!

以下簡單的正則表達式應該起作用:

use strict;
use warnings;

my $data = do {local $/; <DATA>};

$data =~ s/(\w+):(\w+)-?(\w*)\(/$1.$2\u$3(/g;

print $data;

__DATA__
let $local-config := fn:doc($alert-action)/alert:action/alert:name
let $local-coll := fn:collection($uri)/alert:action/alert:name
let $global-coll := fn:distinct-values(fn:collection($global-uri)/alert:action/alert:name[../alert:name = 'ml_alert_action_17_01_action'])

輸出:

let $local-config := fn.doc($alert-action)/alert:action/alert:name
let $local-coll := fn.collection($uri)/alert:action/alert:name
let $global-coll := fn.distinctValues(fn.collection($global-uri)/alert:action/alert:name[../alert:name = 'ml_alert_action_17_01_action'])

3個以上單詞的增強

要處理兩個以上的單詞,可以將正則表達式更改為以下內容:

$data =~ s{(\w+):([\w-]+)(?=\()}{"$1.".lcfirst join '', map ucfirst, split /-/, $2}eg;

或者,如果您的perl版本支持/r開關:

$data =~ s{(\w+):([\w-]+)(?=\()}{"$1.".$2=~s/-(.)/\u$1/gr}eg;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM