- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个可用的正则表达式,但我想让它更具可读性,而且我远不是正则表达式专家,所以我谦虚地希望得到一些提示。
这是为了抓取几个不同的编译器、链接器和其他构建工具的输出而设计的,并用于构建一个不错的小总结报告。它做得很好,但我觉得自己写的方式很笨拙,我宁愿早点学习也不愿以错误的方式使用它。
(.*?)\s?:?\s?(informational|warning|error|fatal error)?\s([A-Z]+[0-9][0-9][0-9][0-9]):\s(.*)$
其中,简单分解如下:
(.*?) # non-greedily match up until...
\s?:?\s? # we come across a possible " : "
(informational|warning|error|fatal error)? # possibly followed by one of these
\s([A-Z]+[0-9][0-9][0-9][0-9]):\s # but 100% followed by this alphanum
(.*)$ # and then capture the rest
我最感兴趣的是让上面的第二个和第四个条目更……漂亮。出于某种原因,我使用的正则表达式测试器 (The Regulator) 不匹配纯空格,所以我不得不使用\s... 但它并不意味着匹配任何其他空格。
任何学校教育都将不胜感激。
最佳答案
使长正则表达式更具可读性的最简单方法是使用“free-spacing”(或\x
)modifier ,这将使您可以像在第二个代码块中那样编写正则表达式——它会忽略空格。然而,并非所有引擎都支持它(根据上面链接的页面,.NET、Java、Perl、PCRE、Python、Ruby 和 XPath 支持它)。
另请注意,在自由间距模式下,如果您只想匹配一个空格字符(除非您正在使用Java,在这种情况下,您必须使用 \
,这是一个转义空格)。
如果您希望每个元素都是可选的,独立于其他元素,您实际上无法为第二行做任何事情,但可以缩短第四行:
\s([A-Z]+\d{4}):\s
\d
是 shorthand class相当于[0-9]
,{4}
指定它应该出现exactly four times .
第三行也可以稍微缩短((?:…)
指定一个非捕获 group ):
(informational|warning|(?:fatal )? error)?
从效率的角度来看,除非您每次使用括号时实际上都需要捕获子模式,否则您可以删除所有子模式,除了第三行,alternation 需要该组。 ) -- 但是可以将其设为非捕获。把这些放在一起你会得到:
.*?
\s?:?\s?
(?:informational|warning|(?:fatal )?error)?
\s[A-Z]+\d{4}:\s
.*$
关于regex - 使一个小的正则表达式更具可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833787/
我的按钮有问题。该按钮是登录按钮。当我在输入凭据后单击回车时,将触发查看凭据是否正确的方法。这没有任何问题。 但还应该发生的是,在检查这些凭据是否正确之后,登录和注册按钮应该会被删除,同时会出现一个新
因此,我尝试以 Angular 显示多个 View ,以帮助解决我正在构建的网站中遇到的页脚问题。我想确保我一直在阅读和尝试模仿的内容是有意义的。这就是我到目前为止所拥有的。 index.html
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。 我使用了 Angular Material 拖放和 angular resizable element 这是解决方法 https://s
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。 我使用了 Angular Material 拖放和 angular resizable element 这是解决方法 https://s
我是一名优秀的程序员,十分优秀!