2011-11-13 48 views
2

我有,我想验证某种模式的字符串:这里的字符串:正则表达式的代码,以允许特定模式

 
[alphanumeric characters at the start of the line, then->] ?,?,?,?,?[lines end with: vb|cr|crlf] 

想我实现作为验证将确保以下,属于对“?,?,?,?,?”字符串:(?)如果有多于一个的问号或逗号(,)

  1. 验证应该返回false在一起。应该导致失败的一个例子是:?? <or> ,, <or> ??? <or> ,,,

  2. 在行尾验证应该是问号(?)和逗号(,)。没有其他字符...

  3. 问题字符串中的最后一个值(也是:"?,?,?,?,?")应该始终是问号而不是逗号。

  4. 同样,此字符串的开头应始终是问号而不是逗号。

我希望这可能与preg_match功能,但请让我知道,如果这是不可能的。

+0

当你写“[字母在行首的字符“是否意味着没有任何问题没有空白空间,应该验证一下还是与问题无关? –

+0

请你可以添加一些样本模式。有更好的见解。 –

+0

“vb”是什么意思? –

回答

1

这个正则表达式怎么样?它符合你的测试案例。

/^[A-Za-z0-9()]+(\?(?:,\?)+)?vb\|cr\|crlf$/i 
          ^
          Added this question mark 

现在,正则表达式匹配:

  1. Read)Aloud Your Alphabet(?,?,?vb|cr|crlf
  2. Read)In Silence Respect(vb|cr|crlf

Demo(此演示省略了上面添加问号)

+0

嗨** nickb **,我试过你的正则表达式,它的工作原理蝙蝠!只有一件事我想问...如果,而不是'读“大声你的字母表(?,?,?vb | cr | crlf',其中提供了'?,?,?',我们取而代之为'读取)在沉默尊重(vb | cr | crlf'中没有'? ,?,?'(仍然遵循我发布的问题中提供的原始“验证准则”,但即使没有任何'?'或'?,?'序列也是有效的?所以很抱歉打扰你。已经关闭...谢谢你的时间 – Nonym

+0

@NonymIty - 如果'阅读)在沉默尊重(vb | cr | crlf'应该匹配,那么你只需要通过后缀使捕获组可选它带有问号 - 我已经用修复程序更新了我的答案。 – nickb

+0

感谢您的回答,** nickb **!到目前为止,我所有的测试都很顺利!我实际上试图自己做,但我错了吗?在小组中检查?和 - 的 - 任何,谢谢! – Nonym

1

试试这个正则表达式:

"/[^,]\?(?:,\?)*vb\|cr\|crlf$/" 

看到它联机工作:ideone

+0

感谢您的回复;目前我正在努力使这项工作与Eugene的文章同时进行与此字符串:阅读)大声朗读你的字母(?,?,?vb | cr | crlf – Nonym

+0

字符串*是否以''vb | cr | crlf''结尾?我想你可能误解了某些东西(或我有)。 –

+0

嗨**马克Byers **,我很抱歉混淆..我的意思是,字符串必须始终具有整个 - >'vb | cr | crlf'在结尾..我欣赏所有的帮助..我无法立即回复,因为我试图检查和发挥你的一些和**尤金**的代码..所以对延误感到抱歉... – Nonym

0

您正在寻找这样的:

echo preg_match('/^[A-Za-z0-9\s\(\)]+(\?,)+\?vb\|cr\|crlf$/', $string); 

+0

谢谢您的回复;我想用下面的字符串试试这个:阅读)大声朗读你的字母(?,?,?vb | cr | crlf – Nonym

+0

我更新了文章 – Eugene

+0

谢谢!对不起,对于迟到的回复.. – Nonym