簡體   English   中英

正則表達式(PHP / Perl)反向引用

[英]Regular Expression (PHP/Perl) Backreferences

我想匹配以下形式的字符串:

158、417、418、500、501和1111節

在哪里我得到所有數字作為反向引用(用超鏈接替換它們)。 我到這為止了:

$text = preg_replace_callback("/Sections? ([0-9.]+)(?:(?:and|,| |or)+([0-9.]+))+/","hyperlink_me", $text); 

那就是PHP(使用兼容perl的正則表達式)。 我認為PHP部分很好,正則表達式不能滿足我的要求,但是我會為上下文提供整行代碼。

問題是我得到的僅有兩個反向引用(除了整個字符串)是第一個數字(“ 158”)和最后一個數字(“ 1111”)。 似乎第二個捕獲的反向引用(“([[0-9。] +”)剛剛從第二個數字開始被覆蓋。從此頁面的“重復和反向引用”中,我得到的想法通常是問題,但在這種情況下不知道如何解決,那里的正則表達式天才誰可以提供幫助?

這就是捕獲括號的工作原理,並且是不可避免的。 但是您可以創建一個“ helper”回調, hyperlink_us ,它可以執行以下操作:

$output = preg_replace_callback("/[^0-9.]+([0-9.]+)/","hyperlink_me", $input);

然后像這樣使用它:

$text = preg_replace_callback("/(Sections? [0-9.]+(?:(?:and|,| |or)+[0-9.]+)+)/","hyperlink_us", $text);

這樣一來, hyperlink_us通過了所有號碼hyperlink_me ,但主叫hyperlink_us可以確保數字只在適當的上下文傳遞(以下簡稱“科(S)...”的東西)。

(免責聲明:我不是一個PHP-er,我假設此函數的行為類似於JavaScript中的類似函數。我確實知道Perl,但它沒有基於回調的regex-replacement函數。)

暫無
暫無

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

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