问题标签 [tokenize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
776 浏览

split - 拆分字符串并安排数据库以在 PHP 中显示产品

我是 php 新手。您能否帮我找到正确安排以下任务的方法:

表“产品”
ID - 详细信息
1 - 1-30,2-134:6:0;;2-7:55:0;;1-2,2-8:25:0 - 此字符串可能很长
2 -
3 - 1-360:17:0;;1-361:185:0

每个产品 1, 2, 3, ... 都存储在 db 中的一行中,尽管产品还按尺寸和颜色单独识别。这就是为什么有些产品的尺寸和颜色比其他产品多的原因。有时产品只有一种尺寸,但有一些颜色。在这种情况下,这一种尺寸不存储在 db 中,而只存储在颜色中。表被不规则地填满。详细信息列不是必需的(可以为空)。详细信息列以这种方式组成,例如:
1-30,2-134:6:0;;2-7:55:0 其中主要分隔符是';;',所以这个字符串将被拆分为:
1-30 ,2-134:6:0
2-7:55:0

考虑到第一个拆分行,接下来要拆分的部分:
1-30 - 第一部分
2-134 - 第二部分
6 - 第三部分
0 -第四个部分
始终出现第一个、第三个和第四个部分。第二部分有时会出现。第一部分和第二部分可以从 1-XXX 或 2-XXX 开始。第三部分表示库存的产品数量。第四部分不重要,可以忽略。

表“类型”
id - 值
1 - 产品
2 - 颜色

表“参数”
id - 值
1 - sr20 h12
2 - sr21 h13
3 - 蓝色
..
30 - sr25 h15
134 - 红色

考虑到上面的表格,前面提到的例子意味着:
1-30 表示 1=product,30=sr25 h15
2-134 表示 2=color,134=red

您能否帮我准备 php 脚本,以正确显示产品的方式:
产品 1 - 尺寸:sr25 h15,颜色:红色,有货:6
产品 1 - 尺寸:sr30 h16,颜色:蓝色,有货:13
产品1 - 尺寸:sr35 h20,颜色:粉色,有货:2
产品 2
产品 3 - 颜色:白色,有货 4

############################

感谢比尔的建议,我将文件拆分为:
$products = explode(";;", $details);
foreach ...
$fields = explode(":", $products);
foreach ...
$attribs = explode(",", $fields);
foreach ...

但是,我不知道应该如何使用:
($attrib_type, $attrib_value) = explode("-", $attribs[0]);

我还为参数准备了预加载的关联表,但我不知道如何使用它。

这是我的代码:

$results = mysql_query("SELECT id, name, details FROM products") or die ('query error');

if(mysql_num_rows($results) > 0) {

}

0 投票
1 回答
2863 浏览

javascript - Javascript 词法分析器/标记器(在 Python 中?)

有谁知道 Javascript 词法分析器或标记器(最好在 Python 中?)

基本上,给定一个任意 Javascript 文件,我想获取令牌。

例如

富 = 1

变成这样:

  1. 变量名:“foo”
  2. 空白
  3. 运算符:等于
  4. 空白
  5. 整数:1
0 投票
6 回答
4041 浏览

java - 字符串分词器

任何人都可以通过在代码中添加一些注释来帮助我理解这个字符串标记器是如何工作的吗?我将非常感谢任何帮助谢谢!

0 投票
3 回答
365 浏览

java - Java Shell 通配符标记器

我的 Java 非常生疏,我一直在尝试制作一个用户界面,以简化 shell 脚本或批处理文件的执行,具体取决于它是分别是 Linus 还是 Win32。这些文件具有以下命名约定。

最终我希望它解析明确的术语,以便我可以:

  1. 标记命令(例如用“-”分隔)并将它们缩短为简化的术语,例如 foxpro 的命令窗口或 cisco 的 IOS(例如,“my co gr”在 unix 中执行“mysql-connect-grid”,在 win32 中执行 *.cmd)
  2. 并且以 IOS 的风格允许用户输入缩写命令,以便他们可以输入问号 (?),它会提示他们唯一的剩余(或下一个)命令选项(例如“我的?”返回 mysql & "my ?" 返回连接或转储)。对于不唯一或无法匹配的命令,其他返回值将是“不明确的”或“未知的”。这可能看起来微不足道,但每个文件夹中有数百个命令,我的用户不想思考......

我编写了一个函数来从目录中提取文件列表并重新调整文件数组。然后我使用下面的方法将其转换为二维数组,该方法返回一个动态大小的潜在命令网格。

这将返回一个二维数组(如下),grid[Row-N][Col-0]匹配也是如此。我只想提取row[0]通配符匹配为cmdToken[0] && row[1]“like”的不同值,cmdToken[1]以便我的用户可以拼凑一个命令直到"my du gr ?"返回"ENTER, [se314]"- 如果这有意义的话......

我的挑战:我似乎无法理解我在 java 中的 matcher 函数。如果是 SQL,它将类似于:

甚至更好:递归地为每个连续列设置一个 int depthmark

直到你有一个完全匹配。

我发现了一个名为 joSQL 的包,我绝望地尝试了它,但我似乎无法让它在 Java6 中工作。无论如何:我也希望有一个纯 Java 解决方案,以便所有内容都可以包含在一个类中......

也许使用扫描仪或其他东西来解析我的多维数组以获得唯一值......我知道我可能让它变得比它需要的更复杂。

向正确方向轻推将不胜感激。

TIA

0 投票
4 回答
636 浏览

java - Java - 标记化参数列表

我正在尝试创建一个方法,该方法采用 String 参数,然后返回参数名称和值的二维 String 数组。

输入的一些示例是(在引号内):

所以一个“;” 是列表分隔符,赋值运算符“=”表示有效参数,即。“\”是一个丢弃值。基本上我正在寻找一个允许我这样做的正则表达式,或者如果有人可以提供一个更优雅的解决方案。

0 投票
1 回答
1002 浏览

vb.net - 从 vb.net 中的字符串导入电话号码

必须有一种更简单的方法来做到这一点。

我正在尝试为一个名为“导入电话号码”的电话号码类编写一个函数。它应该在某个地方使用任何包含 10 位数字的字符串(并允许扩展),并将它们导入到它自己的属性中:AreaCode、Prefix、Suffix 和 Extension (aaa-ppp-ssss-xxxx ...)。

我用正则表达式检查输入以确保它有效,现在我想将这些部分标记为它们各自的属性。我所拥有的看起来像这样(不完整):

有任何想法吗?

0 投票
2 回答
585 浏览

php - token_get_all 空格行为

我不知道是否有人可以帮助我,但无论如何我都会问。我正在创建一个函数,比如token_get_all用 javascript 编写的 php。这个函数应该“标记”给定的 php 代码,但我对空格有一些问题。

在 php 中执行该token_get_all函数我看到只有一些空格被认为是标记,其他的被忽略。

有人可以解释一下这个函数如何处理空格吗?你有没有找到一些关于它的文档?

更新

  • Beetween php 和 if: 忽略
  • 在 if 和 (: 标记化之间
  • Beetween $var 和 =: 标记化
  • Beetween = 和 0:标记化
  • Beetween ) 和 {: 标记化
  • Beetween { 和 ?>:标记化
0 投票
5 回答
5083 浏览

c++ - 有没有比 lex/flex 更好(更现代)的工具来为 C++ 生成标记器?

我最近将源文件解析添加到现有工具中,该工具从复杂的命令行参数生成输出文件。

命令行参数变得如此复杂,以至于我们开始允许将它们作为一个文件提供,该文件被解析为一个非常大的命令行,但语法仍然很笨拙。所以我添加了使用更合理的语法解析源文件的能力。

我使用 flex 2.5.4 for windows 来为这种自定义源文件格式生成标记器,它工作正常。但我讨厌代码。全局变量、奇怪的命名约定以及它生成的 c++ 代码非常糟糕。现有的代码生成后端粘在 flex 的输出上——我不使用 yacc 或 bison。

我即将深入研究该代码,并且我想使用更好/更现代的工具。有谁知道那件事。

  • 在 Windows 命令提示符下运行(Visual Studio 集成没问题,但我使用 make 文件构建)
  • 生成适当封装的 C++ 标记器。(没有全局变量)
  • 使用正则表达式来描述标记化规则(与 lex 语法兼容)
  • 不强迫我使用 c-runtime(或伪造它)进行文件读取。(从内存中解析)
  • 当我的规则强制标记器回溯(或自动修复它)时警告我
  • 让我完全控制变量和方法名称(这样我就可以符合我现有的命名约定)
  • 允许我将多个解析器链接到单个 .exe 中而不会发生名称冲突
  • 如果我愿意,可以生成一个 UNICODE(16 位 UCS-2)解析器
  • 不是集成标记器 + 解析器生成器(我想要 lex 替换,而不是 lex+yacc 替换)

如果这是唯一可用的工具,我可能会使用刚刚生成标记表的工具。

0 投票
4 回答
5429 浏览

c++ - 坏指针?- C++

我正在为 C++ 中的家庭作业编写一个字符串标记化程序,它使用指针。但是,当我运行和调试它时,它说我的指针 pStart 无效。我有一种感觉,我的问题存在于我的参数构造函数中,我在下面包含了构造函数和对象创建。

如果您能告诉我为什么它说 pStart 在我调试它时是一个错误的指针,我将不胜感激。

谢谢!

完整的 stringtokenizer.cpp:

函数 Next 应该返回指向 char 数组中下一个单词的指针。目前还没有完成。:)

完整的 stringtokenizer.h:

完整的 main.cpp:

0 投票
4 回答
10332 浏览

c++ - 指针访问冲突?- C++

我为最近的一个学校项目使用指针编写了一个简单的字符串标记程序。但是,我的StringTokenizer::Next()方法有问题,该方法在调用时应该返回指向 char 数组中下一个单词的第一个字母的指针。我没有收到编译时错误,但我收到了一个运行时错误,其中指出:

该程序当前标记了 char 数组,但随后停止并弹出此错误。我觉得这与NULL我在Next()方法中所做的检查有关。

那么我该如何解决这个问题呢?

另外,如果您发现我可以更有效地或通过更好的练习来做任何事情,请告诉我。

谢谢!!


StringTokenizer.h:


StringTokenizer.cpp:


主要.cpp:



编辑:

好的,只要分隔符是空格,我的程序现在就可以正常工作了。但是,如果我将 `/' 作为分隔符传递给它,它会再次出现访问冲突错误。有任何想法吗?

与空格一起使用的功能: