|
|
|
| возникла задача описать в XSD шаблон значений для некоего аттрибута. задача очень простая: есть несколько букв. допускается любая комбинация из этих букв с условием, что каждая буква повторяется не больше одного раза, и итоговое выражение не должно быть пустым.
скажем, есть три буквы a, b, c. допустимые выражения:
"a", "b", "ab", "ca", "cab"
|
недопустимые:
когда у меня было 3 буквы, я решил это некрасиво и громоздко через enumeration - просто перечислил все варианты общим числом 15. сейчас букв 6, и рисовать enumeration в 1956 значений как-то неэлегантно.
можно ли описать данную задачу в регулярных выражениях? у меня не получается. скажем, я нарисовал что-то вроде:
такой шаблон пропускает "a", "ab", "ac" и не пропускает "aa" или "aca". но он пропускает "" и не пропускает "ca".
подмогните, гуры, а?
заранее бесконечно благодарен. | |
|
|
|
|
|
|
|
для: garazh
(01.04.2011 в 21:19)
| | собственно, с пустой строкой можно побороться средствами XSD. скажем, можно написать так:
<xsd:simpleType name="attrType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:pattern value="a?b?c?"/>
</xsd:restriction>
</xsd:simpleType>
|
но что делать с порядком - ума не приложу. :( | |
|
|
|
|
|
|
|
для: garazh
(01.04.2011 в 21:19)
| |
<?
$strok="acbf";
$arr=preg_split("//",$strok);
$count=count($arr);
for($i=1;$i<$count-1;$i++){
if(preg_match_all("/$arr[$i]/",$strok,$out)>1){
$error="1"; break;
}
}
if($error==1){
echo "Строка $strok никуда не годится!";
}
else{
echo "Строка $strok - нормальная строка!";
}
//Строка acbf - нормальная строка!
$strok="acbc";
$arr=preg_split("//",$strok);
$count=count($arr);
for($i=1;$i<$count-1;$i++){
if(preg_match_all("/$arr[$i]/",$strok,$out)>1){
$error="1"; break;
}
}
if($error==1){
echo "Строка $strok никуда не годится!";
}
else{
echo "Строка $strok - нормальная строка!";
}
//Строка acbc никуда не годится!
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(01.04.2011 в 22:25)
| | написать скрипт/код, который бы валидировал строку по определенному мной правилу, я и сам могу (даже на фортране). мне бы регулярное выраженьице, которое бы я мог вставить в атрибут pattern моей XSD, и которое бы делало то же самое - валидировало значения XML-файла по заданному правилу. | |
|
|
|
|
автор: .heed (02.04.2011 в 06:13) |
|
|
для: garazh
(01.04.2011 в 23:25)
| | Как.то с подсовпадениями
например
/^(?=[abcd]{1,4}$)(\w)(?!\w*\1)(\w)(?!\w*\2).....$/
//не проверял | |
|
|
|
|
автор: .heed (02.04.2011 в 06:20) |
|
|
для: .heed
(02.04.2011 в 06:13)
| | Ili . Vmesto \w | |
|
|
|