我是正则表达式的菜鸟,我需要帮助解决这个问题:
查找并删除1或2个字母组的所有组 由非字母字符包围的字符。 您可能会遇到必须被视为任何拉丁字符的拉丁字符 字母字符。使用PHP,PCRE正则表达式。
例如:
删除:
一个
aa 33 a3 3a
aa3 a3a 3aa 33a a33 3a3
aa3a a3aa 33a3 3a33 aa33 33aa a3a3 3a3a 3aa3 a33a
aa3aa 3aa3a a3a3a aa3a3 33a33 a33a3 3a3a3 33a3a a3a33
aa3aa3 a3a3a3 3a3a3a 33a33a
依旧......
在像“aa3aaa”这样的情况下,正则表达式需要匹配aa3部分。
这是我到目前为止所得到的:
(\b\d*?[a-z]{1,2}\d*?\b)|(\b(\d+?[a-z]{1,2}\d+?)+?\b)|(\b([a-z]{1,2}\d+?[a-z]{1,2})+?\b)|(\b(\d+?[a-z]{1,2})+?\b)|(\b([a-z]{1,2}\d+?)+?\b)
img:https://www.debuggex.com/i/gkZ0uhVVhoysmN81.png
我无法匹敌的话:
3l3l3
l3l3l
此外,我无法将这个词部分匹配:
aa3aaa
任何改善我的正则表达式的帮助将不胜感激!非常感谢你!
答案 0 :(得分:1)
你没有说出你使用哪种正则表达式,这是使用PCRE的一种方式:
(?<!\p{L})\p{L}{1,2}(?!\p{L})
这会以这种方式转换您的要求:
\p{L}{1,2}
(?<!\p{L})
(?!\p{L})
如果您的风格不支持Unicode属性,则可以使用\p{L}
替换[a-zA-Z]
。