正则表达式模式对我来说很难

时间:2014-10-25 15:18:14

标签: regex

我是正则表达式的初学者。 我需要这样做:

wanna match : (bkz: bakınız) 
wanna match : (bkz:falan filan) 
wanna match : (bkz: falan filan) 
wanna match : (bkz: sen kimsin?) 
wanna match : (bkz: ali ata bak)
wanna match : (bkz : selam)
wanna match : (bkz: ŞEYTAN)
wanna match : (bkz:ateş!)
wanna match : (bkz: ali)
wanna match : (bkz: ALİCAN) 
wanna match : (bkz: ali ata bak)
wanna match : (bkz:a) 
wanna match : (bkz ali)
wanna match : (bkz. deneme)
DONT WANNA PARSE : (bkz : http://google.com.tr)
DONT WANNA PARSE : (bkz: ) 
DONT WANNA PARSE :(bkz. (bkz: sss))
DONT WANNA PARSE :(bkz (bkz. (bkz: sss))) 
到目前为止我的正则表达式:/(?<!(?:bkz: ))(?:\(bkz.?[:;\. ]?)([\w şŞüÜçÇıİğĞöÖ?!]+)\)/gmi

现场直播:http://regex101.com/r/pK6yZ1/4

我需要做什么?

2 个答案:

答案 0 :(得分:0)

你可以试试下面的正则表达式,

^(?!.*?bkz:\s*\))(?:(?!bkz[:;. ]).)*?(?:\(bkz.?[:;\. ]?)([\w şŞüÜçÇıİğĞöÖ?!]+)\)

<强>解释

  • ^断言我们刚开始。
  • (?!.*?bkz:\s*\))断言不会有bkz:后跟零个或多个空格以及)符号。
  • (?:(?!bkz[:;. ]).)*?匹配任何char但不是bkz[; :.]零次或多次。这可确保之前不存在任何bkz

  • (?:\(bkz.?[:;\. ]?)匹配bkz以及以下可选字符以及来自清单列表中的以下可选字符。

  • ([\w şŞüÜçÇıİğĞöÖ?!]+)从给定列表中捕获一个或多个字符。

答案 1 :(得分:0)

试试这个:

/(?<!(?:\(bkz[ \.][ \.]))\(bkz ?[:;\. ] ?((?:[\wşŞüÜçÇıİğĞöÖ?!] ?)+)\)/gmi

可以看作是

  • (?<!(?:\(bkz[ \.][ \.])) - &gt;不要匹配以bkz开头的单词
  • \(bkz ?[:;\. ] ? - &gt;寻找有bkz和分隔符的单词
  • ((?:[\wşŞüÜçÇıİğĞöÖ?!] ?)+)) - &gt;后跟一个或多个单词