簡體   English   中英

perl樣式正則表達式以匹配列表中的第n個項目

[英]perl style regex to match nth item in a list

嘗試匹配此列表中的第三項:

/text word1, word2, some_other_word, word_4

我嘗試使用此Perl樣式正則表達式無濟於事:

([^, ]*, ){$m}([^, ]*), 

我只想匹配第三個單詞,前后都不要匹配,也不要逗號或空格。 我需要它是一個正則表達式,這不在程序中,而在Word文件的UltraEdit中。

我可以用來匹配some_other_word(或列表中第三位的任何東西)。

根據社區成員的一些意見,我進行了以下更改,以使正則表達式模式的邏輯更加清晰。

/^(?:(?:.(?<!,))+,){2}\s*(\w+).*/x

說明

 /^ # 1.- Match start of line.
 (?:(?:.(?<!,))+ # 2.- Match but don't capture a secuence of character not containing a comma ...
 ,)              # 3.- followed by a comma  
 {2}             # 4.- (exactly two times) 
 \s*             # 5.- Match any optional space
 (\w+)           # 6.- Match and capture a secuence of the characters represented by \w a leat one character long. 
  .*             # 7.- Match anything after that if neccesary.
  /x     

這是以前建議的。

/(?:\w+,?\s*){3}(\w+)/

嘗試此正則表達式的第1組:

^(?:.*?,){2}\s*(.*?)\s*(,|$)

使用您的樣本和一個邊緣案例觀看現場演示 ,輸入顯示第1組中的捕獲。

它不能一次只返回一個匹配項,因為您的字符串多次出現相同的模式,並且Regular Expression沒有選擇返回選項! 因此,您可以從返回的數組中執行任何所需的操作。

,\s?([^,]+)

實際操作中 ,您需要第二個匹配的組。

暫無
暫無

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

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