嘿我正在尝试使用正则表达式来计算字符串中不带反斜杠的引号数。 例如以下字符串:
"\"Some text
"\"Some \"text
我之前使用的代码String#count('"')
显然这还不够好
当我计算这两个例子的引号时,我需要的结果只是1
我一直在这里寻找类似的问题,我尝试过使用lookbehinds,但无法让它们在ruby中工作。
我已在此Rubular
的previous question上尝试了以下正则表达式/[^\\]"/
^"((?<!\\)[^"]+)"
^"([^"]|(?<!\)\\")"
在
之后,他们都没有给我结果也许正则表达式不是这样做的方法。也许编程方法是解决方案
答案 0 :(得分:3)
string.count('"') - string.count("\\"")
怎么样?
答案 1 :(得分:2)
result = subject.scan(
/(?: # match either
^ # start-of-string\/line
| # or
\G # the position where the previous match ended
| # or
[^\\] # one non-backslash character
) # then
(\\\\)* # match an even number of backslashes (0 is even, too)
" # match a quote/x)
给出一个包含所有引号字符的数组(可能带有前面的非引号字符),除了未转义的字符。
\G
锚点需要匹配连续引号,(\\\\)*
确保反斜杠只计算为转义符号,如果它们在引号之前以奇数出现(将Amarghosh的正确警告带入帐户)。