我有这个正则表达式
^((?!['"])[\x00-\x7F])*$
并且它匹配以下字符串
no its all right lag
我通过RegexBuddy调试器运行它,似乎在每个文字字符匹配后检查否定外观(?!['"])
:
它是如何运作的?
答案 0 :(得分:3)
是的,它会检查[\x00-\x7F]
匹配的每个字符。
此处的否定前瞻用于限制[\x00-\x7F]
字符类。该模式可以描述为匹配整个字符串,该字符串仅包含'
和"
之外的ASCII字符。由于您将*
量词应用于((?!['"])[\x00-\x7F])
组,因此正则表达式引擎尝试将此模式从字符串的开头到其结尾匹配零次或多次,从而检查其中的每个位置。如果将范围拆分为:
^[\x00-\x21\x23-\x26\x28-\x7F]*$
您可以避免使用前瞻导致的回溯(请注意"
为\x22
且'
为\x27
)。
请参阅regex demo:
答案 1 :(得分:3)
此正则表达式匹配if (childCount >= 1) {
if (i == 0)
c.drawLine(v.getX() + v.getPaddingLeft(), v.getHeight() / 2 - v.getY(), v.getX() + v.getPaddingLeft(), v.getHeight(), paint);
else if (i == childCount - 1)
c.drawLine(v.getX() + v.getPaddingLeft(), v.getY(), v.getX() + v.getPaddingLeft(), v.getY() + v.getHeight() / 2, paint);
else
c.drawLine(v.getX() + v.getPaddingLeft(), v.getY(), v.getX() + v.getPaddingLeft(), v.getHeight() + v.getY(), paint);
}
c.drawCircle(v.getX() + v.getPaddingLeft(), v.getY() + v.getHeight() / 2, 8, paint);
范围内的0个或更多ascii字符,但单引号和双引号字符除外。
RegEx分手:
bool result = list1.Any(elem => list2.Values.Contains(elem));
所以在匹配0-127
中的任何ascii字符之前,负向预告断言下一个字符位置不是单引号/双引号。