当前位置: 首页 > 面试题库 >

何时不使用C#(或Java,C ++等)中的Regex

屠德宇
2023-03-14
问题内容

显然,有许多问题看起来像一个简单的正则表达式表达式就可以解决,但是事实证明用正则表达式 很难 解决。

那么, 不是正则表达式专家的 人怎么知道他/她是否应该学习正则表达式来解决给定的问题呢?

这似乎很好地总结了这一点:

有些人在遇到问题时会想到“我知道,我会使用 正则表达式。”
现在他们有两个问题…

(我刚刚更改了问题的标题以使其更加具体,因为C#中Regex的一些问题已在Perl和JScript中得以解决,例如,两级引号使Regex难以理解这一事实。)


问题答案:

请勿尝试使用正则表达式来解析诸如程序源(或嵌套XML)之类的层次结构文本:事实证明它们没有足够的功能,例如,对于一连串的括号,它们无法弄清楚它们是否重新平衡与否。

为此使用解析器生成器(或类似技术)。

另外,我不建议您使用正则表达式以严格的正式标准(例如电子邮件地址)验证数据。它们比您想要的要难,并且您可能会得到不正确的或非常长的正则表达式。



 类似资料:
  • 当我运行命令< code>rake compile时,我很难弄清楚为什么我的rb_define_singleton和rb_define_method调用会中断。 首先,一个问题可能是我不确定最后一个整数参数实际上代表什么,以便决定使用什么值,我无法找到解释这一点的文档,但我觉得我只是猜测在那里,但问题似乎在第3个参数中,所以我担心的是 其次,我的构建失败,在调用时出现以下错误: 使编译../../

  • 问题内容: 我在C#和Java中发现了一些奇怪的地方。让我们看一下这个C ++代码: 在控制台中,您将看到X = 11(在此处查看结果-IdeOne C ++)。 现在让我们看一下C#上的相同代码: 在控制台中,您将看到1(而不是11!)(在这里查看结果-IdeOne C# 我知道您现在在想什么-“这怎么可能?”,但让我们转到下面的代码。 Java代码: 结果与C#中的结果相同(X = 1,在此处

  • 问题内容: C#中与DateTime.Ticks等效的Java语言是什么? Java中与上述代码等效的东西是什么? 问题答案: 好吧,java.util.Date / Calendar的精度只有毫秒以下: 那是最接近的有效等效值。如果您需要在.NET ticks值和/ 之间进行转换,则基本上需要执行缩放(刻度到millis)和偏移(从1AD年1月1日到1970年1月1日)。 Java的内置日期和时

  • 问题内容: 我想将Java中的类转换为C#,大部分更改已经完成,但是我不确定这部分。我想转换以下代码行: 我已经试过了: 但是它不能正常工作,因为GetBytes()期望翻倍。我不确定将其转换为双精度是否可以解决问题,所以我想在这里询问。 问题答案: 根据您的编码,您可以执行以下操作: 有关参考,请参见http://msdn.microsoft.com/zh- cn/library/ds4kkd5

  • 问题内容: 我想知道Java中是否有等效于c ++的const。我了解final关键字,但是不幸的是,我不能使用它来声明函数返回值final。相反,它始终确保该功能不能被覆盖,对吗? 基本上,我想确保给定的返回类不能被修改并且是只读的。用Java有可能吗? 问题答案: 基本上,我想确保给定的返回类不能被修改并且是只读的。用Java有可能吗? 一种解决方法不是直接进行,而是一种 不可变的 对象 。

  • 问题内容: 我有一个排序的对象列表,我想找到一个对象的第一次出现和最后一次出现。在C ++中,我可以轻松使用std :: equal_range(或仅使用一个lower_bound和一个upper_bound)。 例如: 在Java中,似乎没有简单的对等关系?我应该如何与等距离 顺便说一句,我正在使用标准的import java.util.List;。 问题答案: 在Java中,您可以在排序列表中