在探索正则表达式(也称为RegEx-es)时,有许多人似乎将正则表达式视为圣杯.看起来如此复杂的东西 - 只是必须回答任何问题.他们倾向于认为使用正则表达式可以解决所有问题.
另一方面,也有许多人试图不惜一切代价避免使用正则表达式.他们试图找到解决正则表达式的方法并接受额外的编码只是为了它,即使正则表达式是一个更紧凑的解决方案.
为什么正则表达式被认为是如此有争议?是否存在关于它们如何工作的普遍误解?或者可能是一个普遍的信念,正则表达式通常很慢?
我想编写一个将CamelCase转换为人类可读名称的方法.
这是测试用例:
public void testSplitCamelCase() {
assertEquals("lowercase", splitCamelCase("lowercase"));
assertEquals("Class", splitCamelCase("Class"));
assertEquals("My Class", splitCamelCase("MyClass"));
assertEquals("HTML", splitCamelCase("HTML"));
assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
assertEquals("A String", splitCamelCase("AString"));
assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
Run Code Online (Sandbox Code Playgroud) 真正的现代正则表达式真正识别哪种语言?
每当存在具有反向引用的无限长度捕获组(例如(.*)_\1)时,正则表达式现在匹配非常规语言.但是,就其本身而言,这还不足以匹配诸如S ::= '(' S ')' | ?匹配对的parens的无上下文语言.
递归正则表达式(对我来说是新的,但我确信存在于Perl和PCRE中)似乎至少能识别出大多数CFL.
有没有人在这方面做过或读过任何研究?这些"现代"正则表达的限制是什么?对于LL或LR语法,他们是否严格认可或严格低于CFG?或者是否存在可以被正则表达式识别而不是CFG 而且相反的语言?
非常感谢与相关论文的链接.
我试图让这个正则表达式工作有困难.我要做的就是删除块注释.这是我到目前为止,但我不能摆脱决赛*/.
$string = 'this is a test /*asdfa */ ok then';
$pattern = '/\/\*([^\*\/]*)/i';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);
//this is a test */ ok then
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
是否有正则表达式匹配一串不断增加的连续数字,例如123,56789等?我不认为它可以在正则表达式,但值得在这里与人们检查.
我正在写一个小应用程序,它读取一些输入并根据该输入做一些事情.
目前我正在寻找以"魔术"结尾的行,我会使用String的endsWith方法.对于那些正在阅读我的代码的人来说,这是很清楚的.
另一种方法是创建一个Pattern并尝试匹配以"magic"结尾的行.这也很清楚,但我个人认为这是一种矫枉过正,因为我正在寻找的模式并不复杂.
你认为什么时候使用RegEx Java值得?如果它的复杂性,你会如何个人定义什么是复杂的?
此外,是否有时候使用模式实际上比字符串操作更快?
编辑:我正在使用Java 6.
我想解析HTML文本并找到特殊部分.例如,在第3文本div1日row和2日column的table.我有两个解析选项:正则表达式和XPath.每个人的优点和缺点是什么?
谢谢