Regex to validate JSON 我正在尝试编写一个正则表达式来保存json文件。通过在互联网上搜索,我得到了上述问题。我是php和regex的新手。
$pcre_regex = '
/
(?(DEFINE)
(?<number> -? (?= [1-9]|0(?!\d) ) \d+ (\.\d+)? ([eE] [+-]? \d+)? )
(?<boolean> true | false | null )
(?<string> " ([^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
(?<array> \[ (?: (?&json) (?: , (?&json) )* )? \s* \] )
(?<pair> \s* (?&string) \s* : (?&json) )
(?<object> \{ (?: (?&pair) (?: , (?&pair) )* )? \s* \} )
(?<json> \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) \s* )
)
\A (?&json) \Z
/six
';
在上面的代码中,我无法理解什么是/ six和\ A(?&amp; json)\ Z ..任何人都请帮帮我。
答案 0 :(得分:3)
不是six
。它是s
,i
和x
。他们是模式修饰符。
来自PHP manual documentation on Pattern Modifiers:
s
(PCRE_DOTALL
)如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。此修饰符等效于Perl&#s; s修饰符。诸如[^ a]之类的否定类始终匹配换行符,与此修饰符的设置无关。
i
(PCRE_CASELESS
) 如果设置了此修饰符,则模式中的字母将匹配大写和小写字母。
x
(PCRE_EXTENDED
) 如果设置了此修饰符,则模式中的空白数据字符将被完全忽略,除非转义或在字符类中,并且字符类外的未转义#和下一个换行符(包括在内)之间的字符也将被忽略。
\A
与^
类似,但如果您有一个跨越多行的字符串,\A
匹配整个字符串的开头,则相反只是一行开头。