我有这种模式(?<!')(\w*)\((\d+|\w+|.*,*)\)
,用于匹配字符串,如:
c(4)
hello(54, 41)
在SO上得到一些答案之后,我添加了一个负面的lookbehind,这样如果输入字符串前面有'
,那么字符串就不应该匹配。但是,它仍然部分匹配。
例如:
'c(4)
会返回(4)
,即使它不应该匹配任何东西,因为负面的背后隐藏。
如果字符串前面有'
NOTHING匹配,我该怎么做呢?
答案 0 :(得分:1)
由于没有人出现,我会把它扔出去让你开始。
此正则表达式将匹配
之类的内容 aa(a , sd,,,f,)
aa( as , " ()asdf)) " ,, df, , )
asdf()
但不是
'ab(s)
这将解决基本问题(?<!['\w])\w*
(?<!['\w])
不允许引擎跳过单词char的情况
满足不引用
然后选择单词\w*
来抓取所有单词
如果'aaa(
引号在它之前,那么它将不匹配。
这个正则表达式点缀了我认为你想要实现的目标
在正则表达式的函数体部分。
一开始理解可能有点压倒性。
(?s)(?<!['\w])(\w*)\(((?:,*(?&variable)(?:,+(?&variable))*[,\s]*)?)\)(?(DEFINE)(?<variable>(?:\s*(?:"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*')\s*|[^()"',]+)))
可读版本(通过:http://www.regexformat.com)
(?s) # Dot-all modifier
(?<! ['\w] ) # Not a quote, nor word behind
# <- This will force matching a complete function name
# if it exists, thereby blocking a preceding quote '
( \w* ) # (1), Function name (optional)
\(
( # (2 start), Function body
(?: # Parameters (optional)
,* # Comma (optional)
(?&variable) # Function call, get first variable (required)
(?: # More variables (optional)
,+ # Comma (required)
(?&variable) # Variable (required)
)*
[,\s]* # Whitespace or comma (optional)
)? # End parameters (optional)
) # (2 end)
\)
# Function definitions
(?(DEFINE)
(?<variable> # (3 start), Function for a single Variable
(?:
\s*
(?: # Double or single quoted string
"
[^"\\]*
(?: \\ . [^"\\]* )*
"
|
'
[^'\\]*
(?: \\ . [^'\\]* )*
'
)
\s*
| # or,
[^()"',]+ # Not quote, paren, comma (can be whitespace)
)
) # (3 end)
)