gpt4 book ai didi

grammar - 使用 Perl 6 Grammar 解析结构化文本时如何跳过不相关的行?

转载 作者:行者123 更新时间:2023-12-04 09:24:22 26 4
gpt4 key购买 nike

我要赞一个.sql文件使用 Perl 6 语法,我想知道我在解析时是否可以跳过一些不相关的行?

例如:我想跳过 DROP行,/*!....!*/行,--行,以及 CREATE TABLE 之外的空白在下面的文本中阻止。

也就是说,我只想专注于CREATE TABLE块:

    DROP TABLE IF EXISTS `abcd`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `abcd` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'app_id',
`username` varchar(255) DEFAULT NULL COMMENT 'username',
`url` varbinary(255) DEFAULT NULL COMMENT 'url',
PRIMARY KEY (`id`),
UNIQUE KEY `NewIndex1` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=954 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `temp`
--

DROP TABLE IF EXISTS `temp`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `temp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(15) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`phone_model` varchar(10) NOT NULL,
`expire_time` varchar(15) NOT NULL,
`created` varchar(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1496 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

有什么建议吗?

最佳答案

如果您使用“规则”而不是“ token ”,例如在 Brad 的回答中使用 SQL 语法,则原子后的任何空格都会变成对 <ws> 的非捕获调用,所以你可以重新定义 <ws> (whitespace) 以包含您想忽略的其他内容,例如注释:

token ws { \s* | <slash-star-comment>* | <dashes-comment>* }
token slash-star-comment { \s* '/*!' .*? '!*/' \s* }
token dashes-comment { \s* '--' \N* \s* }

我把\s* 分散在那里,这样你也可以在评论之前或之后有空格。

关于grammar - 使用 Perl 6 Grammar 解析结构化文本时如何跳过不相关的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com