簡體   English   中英

RegEx可以在關鍵字之前和之后直接匹配字符

[英]RegEx to Match Characters Directly Before Keyword and Directly Afterwards

我對RegEx還不夠好。 我一直在尋找並嘗試編寫自己的書,但沒有成功。 我想搜索一個字符串

Shelf-15-Contains(Item)10-Depo91

我想搜索(),可以通過

/\(([^()]+)\)/g

當RegEx找到()時,我想獲取(),()和里面的所有內容之前的“東西”,然后緊隨其后的東西。 所以,

Contains(Item)10

編輯:另外,我上面的RegEx確保沒有嵌套(),所以一旦我弄清楚了如何匹配前后的內容,如果有多個嵌套層,我應該能夠遞歸地運行它嗎?

怎么樣:

/([^-]+\([^()]+\)[^-]+)/g

要進行前后匹配,請使用其他捕獲組:

while (
  $str
  =~ m/
        ([^-]*)          # before
        \( ( [^()]* ) \) # (in)
        (?= ([^-]*) )    # after
     /gx
) {
    my ($before, $in, $after) = ($1, $2, $3);
    ...
}

嚴格意義上,正則表達式不能識別嵌套構造(有限狀態機接受字符串)。 Perl的正則表達式引擎提供了用於識別平衡括號的其他結構,但它們很難使用。

http://perldoc.perl.org/perlre.html#Extended-Patterns給出了如何解析位於(??{ code })(?PARNO)平衡括號的示例。

最后,您要解析的字符串的結構似乎是一個-分隔的列表。 嘗試為要解析的內容找到一個正式的語法,它將幫助您設計程序。

如果不需要處理a(b)c(d)e ,則可以將(?= ([^-]*) )簡化為([^-]*)

恕我直言,這里不需要太復雜。 這是一個正則表達式,它將匹配Contains ,方括號中的所有內容(帶或不帶嵌套的,平衡的或不平衡的)以及可選數字。 它假定有-解決此建設的影響:

\w+\(.*?\)\d*(?=-|$)

觀看演示

輸入:

Shelf-15-Contains(I(t)e(m))10-Depo91
Shelf-15-Contains(I(t)e(m))-Depo91

火柴:

Contains(I(t)e(m))10
Contains(I(t)e(m))

暫無
暫無

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

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