我当前的作品几乎完美无缺,但它会错过任何其他数字后面的字符 - 或/ 原始字符串类似于:
#!012 , #!02/09#!011 #!04-072
我现在的作品就像:
$viewedResult = preg_replace('/#!([0-9A-Z]{1,4})/', '<a href="updateMooring.php?Number2=${1}&id='. $id .'">${1}</a>', $viewedResult);
这会给我一些类似的东西:
<a href="updateMooring.php?Number2=04&id=db335b">04</a>-072<br />
但我希望Number2位中的“-072”如:
<a href="updateMooring.php?Number2=04-072&id=db335b">04-072</a>
它也可以包含/ 072s:
<a href="updateMooring.php?Number2=04/072&id=db335b">04/072</a>
有任何想法吗?请记住,有一个#!在数字前面!
答案 0 :(得分:1)
您可以使用以下内容:
preg_replace('~#!([0-9A-Z][0-9A-Z/-]{0,5})~', '<a href="updateMooring.php?Number2=${1}&id='. $id .'">${1}</a>', $viewedResult);
答案 1 :(得分:1)
我会将正则表达式分成两部分,因为我认为你想匹配像\d{1..4}[-/]?\d{1..4}
这样的东西,其中第一和第二组数字总共为4.这可能更好只是寻找(\d+[-/]/d+)
如果总位数大小正确,请在之后进行检查,例如在结果中查找(\d+)
的所有匹配项,并以编程方式检查它们的长度。
一般情况下,我会密切关注允许输入究竟是什么,以及如果输入不匹配,您会得到什么(错误)。将事情拆分会更容易显示正确的错误信息,例如“系泊点数字不正确”(我猜这是关于什么)。
答案 2 :(得分:0)
如果您想要Number2的值,请使用:
Number2\s*=\s*([^;"]*)[;"]
然后使用第一个捕获组。
答案 3 :(得分:0)
愚蠢的问题:为什么不使用这个正则表达式/#!([0-9A-Z/-]{1,4})/
?
旁注:{1,4}
阻止您将检索值04-072
(长度为6个字符)。
希望有所帮助:)