我正在尝试在C#中创建一个正则表达式模式以查找字符串,任何[之前]没有先于或后面跟着“。”...这里是我到目前为止的模式,这让我想到实际问题:它只适用于不在第一行的文本吗?
模式:
([^\.]\[[^\[]*][^\.])
考虑以下“文本”值:
[F] (never matches even if it should)
[F].[1234] (not a match, correct)
[P] (is a match)
如果有人可以帮助我,我会非常感激,因为我不能,因为我的生活,弄清楚为什么不考虑第一行。
谢谢!
答案 0 :(得分:4)
您编写的正则表达式验证了第一个[
必须在其前面有一个不是.
的字符。第一个[
前面没有任何字符,因此失败。
使用否定断言,您可以说“匹配,如果没有.
”。
((?<!\.)\[[^\[]*](?!\.))
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
(?<! look behind to see if there is not:
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
\[ '['
--------------------------------------------------------------------------------
[^\[]* any character except: '\[' (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
] ']'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
) end of \1
答案 1 :(得分:0)
你也可以使用这种模式:
((^|[^\.])\[[^\[]*][^\.])
与你的不同之处在于[
可能只是该行中的第一个符号。
我还建议您使用http://regex101.com/之类的网站来更好地了解正则表达式的工作原理。