浏览Linux内核源代码我发现了一些代码 ,其中由括号括起来的语句块被当作一个expression式来处理,也就是说,一个expression式的值是最后一个语句的值。 例如: int a = ({ int i; int t = 1; for (i = 2; i<5; i++) { t*=i; } t; }); 我一直在研究ANSI C语法,试图弄清楚这段代码如何适合parsing树,但是我还没有成功。 那么,有没有人知道这个行为是由这个标准规定还是只是GCC的一个特点? 更新:我已经试过用flag -pedantic,编译器现在给我一个警告: warning: ISO C forbids braced-groups within expressions
我经常遇到需要从string中获取许多令牌的情况,经过无数次的尝试,我找不到简化过程的方法。 所以我们假设文字是: 启动:testing – testing – LOREM-存有-SIR-doloret – 等 – 等 – 的东西:结束 这个例子里面有8个项目,但是说可能有3到10个项目。 我理想的喜欢这样的事情: start:(?:(\w+)-?){3,10}:end很好,干净,但它只捕获最后一场比赛。 看这里 我通常在简单的情况下使用这样的东西: start:(\w+)-(\w+)-(\w+)-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?:end 3组是强制性的,另外7组是可选的,因为最大限制为10,但是这看起来并不“好”,如果最大限制为100并且比赛更复杂,那么写和跟踪将是一个痛苦。 演示 我能做到的最好的: start:(\w+)-((?1))-((?1))-?((?1))?-?((?1))?-?((?1))?-?((?1))?-?((?1))?:end 特别是如果比赛复杂但仍然很长的话更短。 演示 任何人都设法使它作为1正则expression式解决scheme没有编程 ? 我最感兴趣的是如何能够在PCRE中完成,但其他口味也可以。 更新: 目的是通过RegEx单独validation匹配并捕获match 0的单个令牌,而没有任何操作系统/软件/编程语言限制 更新2(赏金): 在@ nhahtdh的帮助下,我通过\G获得了RegExp: (?:start:(?=(?:[\w]+(?:-|(?=:end))){3,10}:end)|(?!^)\G-)([\w]+) 演示甚至更短,但可以描述不重复的代码 我也对ECMA风格感兴趣,因为它不支持\G想知道是否有另一种方法,特别是不使用/g修饰符。
我正在写一个Java实用程序,它可以帮助我生成性能testing的大量数据。 能够为string指定一个正则expression式真的很酷,这样我的生成器就会吐出与之相匹配的东西。 有没有已经出炉的东西,我可以用它来做到这一点? 还是有一个图书馆,让我在那里的大部分路? 谢谢
我想在regex使用一个variable ,我怎样才能在Python实现这一点? TEXTO = sys.argv[1] if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE): # Successful match else: # Match attempt failed
$string = " put returns between paragraphs for linebreak add 2 spaces at end "; 想要从string中删除所有新行。 我有这个正则expression式,它可以捕获所有这些,问题是我不知道应该使用哪个函数。 /\r\n|\r|\n/ $string应该成为: $string = "put returns between paragraphs for linebreak add 2 spaces at end ";
任何人都可以帮我创build一个正则expression式来进行密码validation。 条件是“密码必须包含8个字符和至less一个数字,一个字母和一个独特的字符,如!#$%&? "
是否有可能使用RegEx来validation或清理Base64数据? 这是一个简单的问题,但推动这个问题的因素是困难。 我有一个Base64分析器,不能完全依赖input数据来遵循RFC规范。 所以,我面对的问题是可能不会分解为78(我认为是78,我不得不仔细检查RFC,所以如果确切的数字是错误的,我不认为)字符行,或者线路不能在CRLF中结束,因为它可能只有CR或LF,或者没有。 所以,我已经有一段时间来parsingBase64格式的数据,所以像下面这样的例子变得不可能正确解码。 为了简洁,我只会显示部分MIME头文件… Content-Transfer-Encoding: base64 VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu 好吧,parsing这个没有问题,这正是我们所期望的结果。 在99%的情况下,使用任何代码至lessvalidation在缓冲区中的每个字符是一个有效的base64字符,完美的作品。 但是,这引发了一场混战。 Content-Transfer-Encoding: base64 http://www.stackoverflow.com VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu 这是我在某些病毒和其他东西中看到的利用某些邮件阅读器阅读的b64编码的一个版本,它希望不惜一切代价来parsingmime,而不是严格按照本书进行parsing,而不是RFC; 如果你愿意。 我的base64解码器解码第二个例子到下面的数据stream。 原始stream是全部ASCII数据! 0x86DB69FFFC30C2CB5A724A2F7AB7E5A307289951A1A5CC81A5CC81CDA5B5C1B19481054D0D 2524810985CD94D8D08199BDC8814DD1858DAD3DD995C999B1BDDC8195E1B585C1B194B8 任何人都有一个很好的方法来同时解决这两个问题? 我不确定甚至有可能,除了对数据进行两次不同规则的转换,并对结果进行比较,甚至是这样,你信任哪一个呢? 看起来,ASCII Heuristics就是最好的解决scheme,但是代码和执行时间又多了多less,就像病毒扫描程序一样复杂,这个代码涉及到了什么? 你将如何训练启发式引擎来学习什么是可接受的b64,哪些不是? 更新: 做这个问题继续得到的意见的数量,我已经决定张贴我已经在C#应用程序中使用了3年的简单RegEx现在,成千上万的交易。 老实说,我喜欢Gumbo最好的答案,这就是为什么我select它作为select的答案。 但是,对于任何使用C#的人来说,至less要查找一个非常快捷的方法来检测string或byte []是否包含有效的b64数据,正如我所说的,这对我来说工作得非常好。 [^-A-Za-z0-9+/=]|=[^=]|={3,}$ 是的,这是针对base64数据的STRING ,而不是格式正确的RFC1341消息。 因此,如果您正在处理此类数据,请在尝试使用上述RegEx之前考虑这一点。 如果你正在处理Base16,Base32,Radix甚至Base64用于其他目的(URL,文件名,XML编码等),那么强烈build议你阅读Gumbo在他的回答中提到的RFC4648 ,因为你需要做好在尝试使用此问题/答案集中的build议之前,了解实现所使用的字符集和终止符。
这是一系列教育正则expression式文章的第二部分。 它展示了如何使用前瞻和嵌套的引用来匹配非规范的语言。 首先介绍嵌套引用: 这个正则expression式如何find三angular形数字? 其中一种典型的非正规语言是: L = { a n b n : n > 0 } 这是所有非空string的语言,由一些数字a组成,后面跟着相同数量的b 。 这种语言的string的例子是ab , aabb , aaabbb 。 这个语言可以通过抽象引理显示为不规则的。 它实际上是一个典型的上下文无关语言 ,可以由上下文无关文法 S → aSb | ab S → aSb | ab 。 尽pipe如此,现代的正则expression式实现清楚地认识到不仅仅是正规的语言。 也就是说,它们不是由forms语言理论定义的“规则”。 PCRE和Perl支持recursion正则expression式,.NET支持平衡组定义。 更less的“奇特”特征,例如反向引用匹配,意味着正则expression式不规则。 但是这个“基本”function有多强大呢? 我们可以用Java正则expression式来识别L吗? 我们是否可以将lookaround和嵌套的引用结合在一起,并且有一个与例如String.matches匹配的模式来匹配像ab , aabb , aaabbb等string? 参考 perlfaq6:我可以使用Perl正则expression式来匹配平衡文本吗? MSDN – 正则expression式语言元素 […]
请有人可以告诉我一个简单的方法来find一个HTML文件中使用正则expression式在Java中的href和src标签? 然后,如何获得与标签相关的url? 感谢您的任何build议。
我知道有很多正则expression式线程,我需要一个特定的模式,我不能在任何地方 此正则expression式以YYYY-MM-DD格式进行validation /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/ 我需要的模式是DD / MM / YYYY(第一天,因为它是西class牙语,只有“/”,“ – ”不应该被允许) 我search了几个正则expression式库,我认为这应该工作…但由于我不熟悉正则expression式我不确定它是否validation那样 (0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d 我也不知道要逃避斜线,我试图“看”string中的逻辑,但这就像试着“看”matrix码给我。 我把正则expression式string放在一个选项.js中 […] }, "date": { "regex": (0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d, "alertText": "Alert text AAAA-MM-DD" }, "other type…"[…] 所以,如果正则expression式是好的,我将如何逃避它? 如果不是,那么正确的正则expression式是什么,我如何逃避它? :P 非常感谢