当前位置: 首页 > 知识库问答 >
问题:

在没有正则表达式的情况下,是否可以将日志字符串分离为所需模式的变量?

罗翔
2023-03-14

我在问是否可以分开。在构造变量时将行记录到变量。日志文件。让我解释一下:

如图所示:https://httpd.apache.org/docs/2.4/logs.html

组合日志格式:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

我必须用Java实现这一点:

样本行:

xxx.xxx.xxx.xxx - - [03/Jul/2017:09:05:56 +0000] "GET /index.php?route=journal2/assets/css&j2v=2.7.6 HTTP/1.1" xxx xxx "http://xxxxxxxx.xxx.xxx/index.php?route=product/search&search=asus" "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.90 Safari/537.36 Vivaldi/1.91.867.38"

我需要将此字符串分隔为:

  • xxx。xxx。xxx。xxx

明白了吗?没有regex我怎么能做到?顺便说一句,它会有数百行,所以有没有办法像这样处理它们?

共有1个答案

商高谊
2023-03-14

string类有一些方法,比如indexOf(),您可以使用这些方法手动“搜索”字符串中的特定“分隔符”。然后使用substring()等方法获取子字符串。

换句话说:完全可以编写自己的特定解析代码,从字符串中提取值。

但这意味着尝试重新发明一个现有的轮子;知道你的尝试会花费很多时间,结果很可能是不完整的,并在你没有预料到的第一条日志线上断裂。

当我正确回答您的问题时,您希望能够提供一种“格式”,例如:LogFormat”%h%l%u%t\%r\%

除此之外,考虑这个任务是非常先进的。这是一个新手在合理的时间内想不出的事情。取而代之的是:花你的精力去学习应用现有的、经过充分验证和测试的技术。在这种情况下,这就是出路(同样从商业角度来看——其他任何事情都是浪费金钱)。

假设这是为了“学习目的”——那么第一段告诉你从哪里开始。但除此之外:

  • 你必须首先定义自己的“模式语言

正如所说:可能,但要付出大量的努力。

 类似资料:
  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 使用该模块,似乎无法拆分为空字符串的模式匹配: 换句话说,即使找到匹配项,即使它是空字符串,也无法拆分该字符串。 的文档似乎支持我的结果。 对于这种特殊情况,很容易找到“解决方法”: 但这是一种容易出错的方法,因为这样我就必须提防已经包含要分割的子字符串的字符串: 有没有更好的方法可以拆分与模块的空模式匹配?另外,为什么不允许我首先这样做呢?我知道使用正则表达式的其他拆分算法是可行的。

  • 问题内容: 我正在寻找Java代码来检查字符串是否为有效的XML。 问题答案: 用正则表达式验证XML是不可能的。XML不是常规语言。 使用XML解析器尝试将字符串解析为XML,或者对照模式(例如DTD或XSD文件)验证XML文档。

  • 问题内容: 我想使用正则表达式向值 添加一个(变量)标记,该模式在PHP上可以正常使用,但是在将其实现为JavaScript时遇到了麻烦。 模式是(是变量): 我逃脱了反斜杠: 但这似乎不对,我记录了模式及其确切的样子。有任何想法吗? 问题答案: 要从字符串创建正则表达式,必须使用JavaScript的object。 如果你也想匹配/替换超过一次,那么你就 必须添加的(全局匹配)标志。这是一个例子

  • 问题内容: 如果无法将字符串解析为long则抛出错误。有没有比使用更快的方法来验证字符串?谢谢 问题答案: 您可以创建相当复杂的正则表达式,但这不值得。在这里使用异常是绝对正常的。 这是自然的例外情况:您假设字符串中有一个整数,但实际上还有其他东西。应该抛出异常并正确处理。 如果查看内部代码,将会看到有许多不同的验证和操作。如果要在解析之前执行所有操作,则会降低性能(如果我们正在谈论解析数百万个数

  • 我想将一个长数组值转换为一个特定格式的字符串。 例如,将longArray={0,1,2,3}转换为字符串0.1.2.3 我可以执行arrays.ToString(longArray),它将返回[0,1,2,3]。 现在必须将字符串[0,1,2,3]转换为0.1.2.3