- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文:这是一个日志分析的东西。我正在创建一个 regex
程序来查找从客户端发送到服务器的某些请求的出现。我有包含这些请求以及其他日志的客户端日志文件。
问题:当请求消息发送到服务器时,客户端应该有 2 个日志语句,如:
sending..
message_type
当找到上述语句或模式时,我们可以说一个请求已经发送。它是组合模式。好的
我们期望日志文件内容是这样的
sending..
message_type
...//other text
sending..
message_type
...//other text
sending..
message_type
从上面的日志我们可以看出客户端已经发送了 3 条消息。但是在实际的日志文件中,不知何故,模式重叠如下(不是针对所有消息,而是针对某些消息):
sending..(1)
...//other text
sending..(2)
message_type(2)
...//other text
message_type(1)
sending..(3)
message_type(3)
还有 3 个请求(我对消息进行了编号以便理解)。但是模式是重叠的。即在完全记录第一条消息之前,第二条消息被记录了。以上解释是为了理解。以下为部分日志原件:
原始日志
Send message to server:
Created post notification log dir
Created post notification log dir
Created post notification log dir
Send message to server:
Created post notification log dir
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
INFO [a] - Server Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><response xaction_guid="new xaction guid" type="ok"></params></response></message>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
INFO [a] - Server Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><response xaction_guid="new xaction guid" type="ok"></response></message>
这里根据解释单个请求将被识别为它的 2 个部分:
Send message to server:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
我尝试过的
public class LogMatcher {
static final String create_session= "Send message to server(.){10,1000}(<\\?xml(.){10,500}type=\"createsession\"(.){1,100}</message>)";
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/dummy.txt"))));//I put the above log in this file
StringBuilder b = new StringBuilder();
String line = "";
while((line = reader.readLine()) != null ){
b.append(line);
}
findMatch(b,"Send message to server","Send message to server");
findMatch(b,create_session,"create_session");
}
private static int findMatch(StringBuilder b,String pattern, String type) {
int count =0;
Pattern regex = Pattern.compile(pattern,Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(b.toString());
while (regexMatcher.find()) {
count++;
}
System.out.printf("%25s%2d\n",type+": ",count);
return count;
}
}
当前输出
意图是找出发送的createsession
消息的数量
Send message to server: 2
create_session: 1
预期输出
从日志中可以清楚地看到发送了 2 条消息。因此输出将是:
Send message to server: 2
create_session: 2
您可以看到我在代码中尝试过的模式。任何人都可以建议一种模式以获得所需的结果吗?
注意:可以简单地说为什么不单独使用 Send message to server
计数。因为在日志中有许多类型的消息,如 login、closesession
等。它们的第一部分都是 Send message to server
。它们也单独记录了消息类型出于其他目的,所以我们不能中继任何部分(意味着只能中继我们可以中继的组合)
最佳答案
Find occurrence of certain requests send to a server from a client.
"other way" that you can neglect here , that will have like
Store in DB :
instead ofSend message to server
and the xml message.
我会提出一个新策略:
type=\"createsession\"
独立的 xml。Store in DB:
xml,但忽略它们(不要增加计数器)。我们可以使用下面的表达式来匹配发送到服务器的消息数。
^(?<toserver>Send message to server:)
regexMatcher.group("toserver")
增加计数器。并独立匹配目标 xmls 为:
^(?<message><\? *xml\b.{10,500} type *= *\"createsession\")
regexMatcher.group("message")
.那么,我们如何忽略 Store in DB:
xml?我们可以匹配它们,同时不创建捕获。
^Store in DB ?:\r?\n(?:.*\n)*?<\? *xml\b.*
Store in DB :
, 其次是\r?\n(?:.*\n)*?
尽可能少的行,直到<\? *xml\b.*
它与拳头相配<?xml
行正则表达式
^(?:Store in DB ?:\r?\n(?:.*\n)*?<\? *xml\b.*|(?<toserver>Send message to server:)|(?<message><\? *xml\b.{10,500} type *= *\"createsession\"))
代码
static final String create_session = "^(?:Store in DB ?:\\r?\\n(?:.*\\n)*?<\\? *xml\\b.*|(?<toserver>Send message to server:)|(?<message><\\? *xml\\b.{10,500} type *= *\\\"createsession\\\"))";
public static void main (String[] args) throws java.lang.Exception
{
//for testing purposes
final String text = "Send message to server:\nCreated post notification log dir\nCreated post notification log dir\nCreated post notification log dir\nSend message to server:\nCreated post notification log dir\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><message schema_version=\"3644767c-2632-411a-9416-44f8a7dee08e\"><request xaction_guid=\"new xaction guid\" type=\"createsession\"/></message>\nStore in DB :\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><message schema_version=\"3644767c-2632-411a-9416-44f8a7dee08e\"><request xaction_guid=\"new xaction guid\" type=\"createsession\"/></message>\nINFO [a] - Server Response: <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><message schema_version=\"3644767c-2632-411a-9416-44f8a7dee08e\"><response xaction_guid=\"new xaction guid\" type=\"ok\"></params></response></message>\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><message schema_version=\"3644767c-2632-411a-9416-44f8a7dee08e\"><request xaction_guid=\"new xaction guid\" type=\"createsession\"/></message>\nINFO [a] - Server Response: <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><message schema_version=\"3644767c-2632-411a-9416-44f8a7dee08e\"><response xaction_guid=\"new xaction guid\" type=\"ok\"></response></message>";
System.out.println("INPUT:\n" + text + "\n\nCOUNT:");
StringBuilder b = new StringBuilder();
b.append(text);
findMatch(b,create_session,"create_session");
}
private static int findMatch(StringBuilder b,String pattern, String type) {
int count =0; // counter for "Send message to server:"
int countType=0; // counter for "type=\"createsession\""
Pattern regex = Pattern.compile(pattern,Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(b.toString());
while (regexMatcher.find()) {
if (regexMatcher.group("toserver") != null) {
count++;
} else if (regexMatcher.group("message") != null) {
countType++;
} else {
// Ignoring "Store in DB :\n<?xml...."
}
}
System.out.printf("%25s%2d\n%25s%2d\n", "to server: ", count, type+": ", countType);
return countType;
}
输出
INPUT:
Send message to server:
Created post notification log dir
Created post notification log dir
Created post notification log dir
Send message to server:
Created post notification log dir
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
Store in DB :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
INFO [a] - Server Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><response xaction_guid="new xaction guid" type="ok"></params></response></message>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><request xaction_guid="new xaction guid" type="createsession"/></message>
INFO [a] - Server Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><message schema_version="3644767c-2632-411a-9416-44f8a7dee08e"><response xaction_guid="new xaction guid" type="ok"></response></message>
COUNT:
to server: 2
create_session: 2
关于java - 如何在模式重叠时找到事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33822886/
对此感到疯狂,真的缺少一些东西。 我有webpack 4.6.0,webpack-cli ^ 2.1.2,所以是最新的。 在文档(https://webpack.js.org/concepts/mod
object Host "os.google.com" { import "windows" address = "linux.google.com" groups = ["linux"] } obj
每当我安装我的应用程序时,我都可以将数据库从 Assets 文件夹复制到 /data/data/packagename/databases/ .到此为止,应用程序工作得很好。 但 10 或 15 秒后
我在 cc 模式缓冲区中使用 hideshow.el 来折叠我不查看的文件部分。 如果能够在 XML 文档中做到这一点就好了。我使用 emacs 22.2.1 和内置的 sgml-mode 进行 xm
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
根据java: public Scanner useDelimiter(String pattern) Sets this scanner's delimiting pattern to a patt
我读过一些关于 PRG 模式以及它如何防止用户重新提交表单的文章。比如this post有一张不错的图: 我能理解为什么在收到 2xx 后用户刷新页面时不会发生表单提交。但我仍然想知道: (1) 如果
看看下面的图片,您可能会清楚地看到这一点。 那么如何在带有其他一些 View 的简单屏幕中实现没有任何弹出/对话框/模式的微调器日期选择器? 我在整个网络上进行了谷歌搜索,但没有找到与之相关的任何合适
我不知道该怎么做,我一直遇到问题。 以下是代码: rows = int(input()) for i in range(1,rows): for j in range(1,i+1):
我想为重写创建一个正则表达式。 将所有请求重写为 index.php(不需要匹配),它不是以/api 开头,或者不是以('.html',或'.js'或'.css'或'.png'结束) 我的例子还是这样
MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式 MVC模式用于应用程序的分层开发 Model(模型) - 模型代表一个存取数据的对象或 JAVA PO
我想为组织模式创建一个 RDF 模式世界。您可能知道,组织模式文档基于层次结构大纲,其中标题是主要的分组实体。 * March auxiliary :PROPERTIES: :HLEVEL: 1 :E
我正在编写一个可以从文件中读取 JSON 数据的软件。该文件包含“person”——一个值为对象数组的对象。我打算使用 JSON 模式验证库来验证内容,而不是自己编写代码。符合代表以下数据的 JSON
假设我有 4 张 table 人 公司 团体 和 账单 现在bills/persons和bills/companys和bills/groups之间是多对多的关系。 我看到了 4 种可能的 sql 模式
假设您有这样的文档: doc1: id:1 text: ... references: Journal1, 2013, pag 123 references: Journal2, 2014,
我有这个架构。它检查评论,目前工作正常。 var schema = { id: '', type: 'object', additionalProperties: false, pro
这可能很简单,但有人可以解释为什么以下模式匹配不明智吗?它说其他规则,例如1, 0, _ 永远不会匹配。 let matchTest(n : int) = let ran = new Rand
我有以下选择序列作为 XML 模式的一部分。理想情况下,我想要一个序列: 来自 my:namespace 的元素必须严格解析。 来自任何其他命名空间的元素,不包括 ##targetNamespace和
我希望编写一个 json 模式来涵盖这个(简化的)示例 { "errorMessage": "", "nbRunningQueries": 0, "isError": Fals
首先,我是 f# 的新手,所以也许答案很明显,但我没有看到。所以我有一些带有 id 和值的元组。我知道我正在寻找的 id,我想从我传入的三个元组中选择正确的元组。我打算用两个 match 语句来做到这
我是一名优秀的程序员,十分优秀!