我有一个PHP数组,我正在解析它以获取电子邮件地址。有时我会想要评论一个条目,所以我可以使用不同的值进行测试。
以下是数组的示例:
array('system.email' => array(
'to' => array(
'contactus' => 'contactus@example.com',
'newregistration' => 'newreg@example.com',
'requestaccess' => 'requestaccess@example.com',
// 'workflow' => 'workflow@example.com'
'workflow' => 'test_workflow@example.com'
)
));
这是我的PARSE规则:
parse read %config.php [
thru "'system.email'" [
thru "'to'" [thru "'workflow'" [thru "'" copy recipient-email to "'^/"]]
] to end
]
当我运行时,recipient-email
的值为“workflow@example.com”。如何编写我的规则,使其忽略以//
开头的行?
答案 0 :(得分:5)
吃掉评论行的规则看起来像这样:
spacer: charset reduce [tab cr newline #" "]
spaces: [some spacer]
any-spaces: [any spacer]
[any-spaces "//" thru newline]
您可以根据当前规则判断您希望如何做到这一点。这只是处理数组中注释的一种有点混乱的方式。
text: {array('system.email' => array(
'to' => array(
'contactus' => 'contactus@example.com',
'newregistration' => 'newreg@example.com',
'requestaccess' => 'requestaccess@example.com',
// 'workflow' => 'workflow@example.com'
'workflow' => 'test_workflow@example.com'
)
));}
list: []
spacer: charset reduce [tab cr newline #" "]
any-spaces: [any spacer]
comment-rule: [any-spaces "//" thru newline]
email-rule: [
thru "'"
copy name to "'" skip
thru "'"
copy email to "'"
thru newline
]
system-emails: [
thru "'system.email'" [
thru "to' => array("
some [
comment-rule |
email-rule (append list reduce [name email])
]
] to end
]
parse text system-emails
print list
这将导致数组中的名称和电子邮件块。
也许更全面的方法可以在解析之前处理源并删除所有注释。这是我过去使用过的一个功能:
decomment: func [str [string!] /local new-str com comment-removing-rule] [
new-str: copy ""
com: [
"//"
thru newline
]
comment-removing-rule: [
some [
com |
copy char skip (append new-str char)
]
]
parse str comment-removing-rule
return new-str
]