Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何编写一个符合理想模式而不符合其他模式的正则表达式?_Java_Regex - Fatal编程技术网

Java 我如何编写一个符合理想模式而不符合其他模式的正则表达式?

Java 我如何编写一个符合理想模式而不符合其他模式的正则表达式?,java,regex,Java,Regex,我正在编写一个简化的Java编译器。我为变量名编写了一个正则表达式: “(?[a-zA-Z]+[\w]*)” 我想补充一点,名字不能是某些单词,比如int,double,true,false 我试着用^,但它不起作用。我不认为这应该通过正则表达式来实现,而是可以更好地使用哈希集来实现,并排除该集中包含的标识符名称。我不认为这应该通过正则表达式实现,而是可以更好地使用哈希集来实现排除集合中包含的标识符名称。这可以通过RE完成,但人类编写它并不容易。在扫描程序中将关键字视为标识符,然后在标记器中将标

我正在编写一个简化的Java编译器。我为变量名编写了一个正则表达式: “(?[a-zA-Z]+[\w]*)”

我想补充一点,名字不能是某些单词,比如int,double,true,false


我试着用^,但它不起作用。

我不认为这应该通过正则表达式来实现,而是可以更好地使用
哈希集来实现,并排除该集中包含的标识符名称。

我不认为这应该通过正则表达式实现,而是可以更好地使用
哈希集来实现排除集合中包含的标识符名称。

这可以通过RE完成,但人类编写它并不容易。在扫描程序中将关键字视为标识符,然后在标记器中将标识符与关键字区分开来。这应该要简单得多。

这可以用RE来完成,但人类编写它并不容易。在扫描程序中将关键字视为标识符,然后在标记器中将标识符与关键字区分开来。这应该更简单。

^用于其他用途:

^可能出现在模式的开头,以要求匹配 发生在一行的最开头。例如,^abc匹配 abc123,但不是123abc

考虑使用“(?!…)”:

(?!…)是消极的前瞻,因为它要求 指定的模式不存在

我建议,如果这是不可能的或太难,去真正的编码代替。有时,正则表达式可能比实际的、优化的代码慢得多,它们可能会非常混乱,并且您可能很难找到所编写代码的错误

要试用正则表达式,请选中此项:

要快速引用,请选中此选项:

^用于其他用途:

^可能出现在模式的开头,以要求匹配 发生在一行的最开头。例如,^abc匹配 abc123,但不是123abc

考虑使用“(?!…)”:

(?!…)是消极的前瞻,因为它要求 指定的模式不存在

我建议,如果这是不可能的或太难,去真正的编码代替。有时,正则表达式可能比实际的、优化的代码慢得多,它们可能会非常混乱,并且您可能很难找到所编写代码的错误

要试用正则表达式,请选中此项:

要快速引用,请选中此选项:

您想用什么语言编写Java编译器?如果这也是Java,为什么不使用Java自己的编译器呢?您想用什么语言编写Java编译器?如果这也是Java,为什么不使用Java自己的编译器呢?我想OP的意思是设置否定
[^…]
,而不是BOL断言。作为补充说明,真正常规的、正确实现的REs不会比“优化”代码执行得慢。事实上,从RE生成的最小DFA是可以期望的最“优化”的代码,也可以参见例如:(以及第二部分和第三部分)当然,这取决于具体情况。请注意,与正则表达式相比,实代码具有更强的匹配规则的“能力”,而且与实代码一样,糟糕的正则表达式也会使检查非常缓慢。示例:正则表达式不应为此负责。相反,看起来java的实现被严重破坏了。这段代码在我的机器上执行需要22毫秒:我想OP意味着设置否定
[^…]
而不是BOL断言。作为补充说明,真正常规的、正确实现的REs不会比“优化”代码执行得慢。事实上,从RE生成的最小DFA是可以期望的最“优化”的代码,也可以参见例如:(以及第二部分和第三部分)当然,这取决于具体情况。请注意,与正则表达式相比,实代码具有更强的匹配规则的“能力”,而且与实代码一样,糟糕的正则表达式也会使检查非常缓慢。示例:正则表达式不应为此负责。相反,看起来java的实现被严重破坏了。在我的机器上执行此代码需要22毫秒: