答案1
你可以给你的名字起个名字大的PCRE 中的正则表达式如下:
(?<big>[a-zA-Z0-9]+)
之后的所有内容?<name>
都将用给定的名称进行记录。
被称为正则表达式子例程
因此,repeats ( ?&name
) 变得很容易:
^(?<big>[a-zA-Z0-9]+)(,(?&big))*$
因此,匹配 IP 等变得更简单:
^(?<ip>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?&ip)){3}$
将其与 grep 一起使用,如下所示:
grep -P '^(?<ip>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(.(?&ip)){3}$'
答案2
如果使用perl
或 PCRE 正则表达式,您可以通过使用诸如(?1)
引用第一个捕获组中的正则表达式之类的方式来避免重复:
grep -Px '(?:(\w{3}),)*(?1)'
这将匹配任何非空逗号分隔的 3 个字符单词列表。改成:
grep -Px '(?:(?:(\w{3}),)*(?1))?'
允许空列表。
答案3
请用 -^((([a-zA-Z0-9]){1,45},){2}([a-zA-Z0-9]){1,45})$
这里,我将最大字数设置为45,因为英语最长的单词是45个字符,可以根据要求更改
答案4
正则表达式很简单:[^,]$
回答问题。
感谢@Hkoof 的评论!