我必须创建正则表达式以匹配丑陋的缩写和数字。这些可以是以下“格式”之一:
1) [any alphabet char length of 1 char][0-9]
2) [double][whitespace][2-3 length of any alphabet char]
我试图匹配double:
preg_match("/^-?(?:\d+|\d*\.\d+)$/", $source, $matches);
但是我还没有选择以下示例: 1.1 AA我的测试题目。我的正则表达式有什么问题,我怎样才能将其他正则表达到我的正则表达式?
答案 0 :(得分:1)
在你的正则表达式中,你说“字符串的开头,后跟可能是a - 后跟至少一个数字或后跟0或更多数字,后跟一个点,后跟至少一个数字,然后是字符串的结尾。
所以你的正则表达式可以匹配例如.. 4.5, -.1
等。这正是你告诉它的。
你测试输入字符串不匹配,因为在数字1.1之后还有其他字符存在,即使它以某种方式神奇地匹配你的“双”匹配正则表达式是错误的。
对于没有科学记数法的双人,你通常使用这个正则表达式:
[-+]?\b[0-9]+(\.[0-9]+)?\b
既然我们已经解决了这个问题,那么我们需要一个空格和
[2-3 length of alphabet]
现在我不知道[2-3长度的字母]意味着什么,但通过结合上面你得到这样的正则表达式:
[-+]?\b[0-9]+(\.[0-9]+)?\b\s[2-3 length of alphabet]
如果您希望字符串完全匹配,您还可以放置锚点^ $:
^[-+]?\b[0-9]+(\.[0-9]+)?\b\s[2-3 length of alphabet]$
随时问你是否被卡住了! :)
答案 1 :(得分:0)
我发现你的正则表达式存在多个问题:
^
位于开头,$
位于结尾处。如果您不想这样,请删除它们。$matches
。这是因为您在?:
中设置的(?:...)
内部选项。删除?:
以使该群体捕获。也许这已经解决了你的问题:
preg_match("/-?(\d*\.\d+|\d+)/", $source, $matches);