我在从上传到rubular的以下正则表达式解析某些字段时遇到问题。我正在解析的字符串是来自FTP服务器横幅的特殊标题。为了让我处理这个横幅,行
special:pTXT1TOCAPTURE^:mTXT2TOCAPTURE^:uTXT3TOCAPTURE^
我认为:(?i)^special(:[pmu](.*?)\^)?*
可以做到这一点,但不幸的是,这只给了我最后一场比赛,我不知道为什么我懒得试图抓住每一组。另请注意,我也应该能够捕获一个空字符串,即如果匹配字符串包含:u ^
包装单词显示隐形Ruby版本 匹配结果: 特殊:pTXT1TOMATCH ^:^ mTXT2TOMATCH:uTXT3TOMATCH ^ 匹配组:
这个想法是这条线必须从测试特别开始#39;然后是最多3个捕获组,用p,m或u分隔,直到下一个^符号。我需要捕获上面指出的文本 - 基本上我需要找到TXT1TOCAPTURE,TXT2TOCAPTURE和TXT3TOCAPTURE。这三个捕获组中至少应有一个。
提前致谢
答案 0 :(得分:1)
你的RegEx有两个问题,一个是句法问题,另一个是概念问题。
<强>句法强>:
我们在PCRE中没有这样的修饰符?*
但它在Ruby中等于*
,这表示贪婪的量词。在应用于捕获组的情况下,它捕获最后一个匹配。
<强>概念强>:
使用延迟量词.*?
不会为您提供连续匹配。它立即停止发动机满意度。虽然g
修饰符在下次匹配时处于启用状态,但由于在上次匹配的下一个位置没有^special
,因此永远不会发生。
解决方案是使用\G
令牌从上一场比赛结束时开始匹配的平均值中受益:
(?:special|(?!\A)\G):([pmu][^^]*\^)
答案 1 :(得分:0)