我正在使用一些数据,这些数据为谷歌地图提供路径或一组两个纬度和经度。我已将这两个值存储为mySql数据库中的BLOB,但我需要检测结果中出现的非路径值。为了做到这一点,我已经按照以下格式将它们保存在BLOB中:
阵列(纬度,经度+纬度,经度)
我正在使用preg_match来查找这些结果,但我还没有设法让任何工作。以下是我尝试过的正则表达式代码:
^[a]{1}[r]{2}[a]{1}[y]{1}[\(]{1}[1-9\.\,\+]{1*}[\)]{1}^
^[a]{1}[r]{2}[a]{1}[y]{1}[\(]{1}(\-?\d+(\.\d+)?),(\-?\d+(\.\d+)?)\+(\-?\d+(\.\d+)?),(\-?\d+(\.\d+)?)[\)]{1}^
正规则有时让我感到困惑(正如现在所做的那样)。任何人都可以帮助我吗?
修改
lat可以是2位数,后跟小数点和8位数,lng可以是3位数,可以是3位数,后跟小数点和8位数。两者都可以是正面的或负面的。
以下是一些示例lat lngs:
51.51160000,-0.12766000
-53.36442000,132.27519000
51.50628000,0.12699000
-51.50628000,-0.12699000
所以完全匹配看起来像:
阵列(51.51160000,-0.12766000 + -53.36442000,132.27519000)
进一步修改
我正在使用preg_match()php函数来匹配正则表达式。
答案 0 :(得分:2)
以下是编写正则表达式的一些指示:
如果您对某个角色有一种可能性,例如,数组中的a
,您确实可以将其写为[a]
;但是,您也可以将其写为a
。
如果您希望完全匹配某个内容,则可以将其写为a{1}
,但是,您也可以将其编写为a
。
应用此批次时,^[a]{1}[r]{2}[a]{1}[y]{1}[\(]{1}[1-9\.\,\+]{1*}[\)]{1}^
的示例会缩减为^array\([1-9\.\,\+]{1*}\)^
- 这肯定是一种改进!
接下来,数字也可能包括0,以及1-9。事实上,\d
- 任何数字 - 通常用来代替1-9
。
您使用^
作为分隔符 - 通常是/
;我起初并没有认出来。我不确定你可以使用哪个分隔符,所以,为了以防万一,我会将其更改为通常的/
。这使得上面的正则表达式/array\([\d\.\,\+]{1*}\)/
。
要匹配一个或多个字符或字符集,请使用+
,而不是{1*}
。这使您的查询/array\([\d\.\,\+]+\)/
然后,收集结果数字(假设您只需要括号之间的部分,将其放入(非转义)括号中,因此:/array\(([\d\.\,\+]+)\)/
- 然后您需要将它们拆分,首先是{ {1}},然后按+
。或者,如果恰好有两个lat,lng对,您可能需要:,
- 这将返回4个值,每个数字一个;附加内容( /array\(([\d\.]+),([\d\.]+)\+([\d\.]+),([\d\.]+)\)/
,+
)已被移除,因为它不在(非转义)括号,
中。
编辑:如果你想要负面的拉特和多头(你为什么不呢?)你需要()
(一个“文字 - ”,而不是一个范围的一部分)在适当的地方; \-?
使其成为可选项(即0或1个破折号)。例如,?
您可能还想查看http://regexpal.com - 您可以输入正则表达式和一组字符串,它会突出显示匹配/不匹配的内容。您需要排除分隔符/array\((\-?[\d\.]+),(\-?[\d\.]+)\+(\-?[\d\.]+),(\-?[\d\.]+)\)/
或/
。
请注意,这有点快而且松散;它也会匹配^
。您可以将其更多地指出来,例如,使用array(5,0+0,1...........)
而不是(\-?\d*\.\d+)\)
作为数字;将匹配(0或1个文字(\-?[\d\.]+)\)
)后跟(0或更多数字)后跟(正好一个文字点)后跟(1个或更多个数字)。
答案 1 :(得分:1)
这是我制作的正则表达式:
array\((-*\d+\.\d+),(-*\d+\.\d+)\+(-*\d+\.\d+),(-*\d+\.\d+)\)
这也会将四个数字分成几组,以便您可以获得个别数字。
你会注意到
的重复模式(-*\d+\.\d+)
说明:
-* means 0 or more matches of the - sign ( so - sign is optional)
\d+ means 1 or more matches of a number
\. means a literal period (decimal)
\d+ means 1 or more matches of a number
整个事情用括号括起来,使其成为一个被捕获的群体。