我正在尝试转换一个现有的PHP正则表达式,以应用于略有不同的文档样式。
以下是文档的原始样式:
**FOODS - TYPE A**
___________________________________
**PRODUCT**
1) Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese;
2) La Fe String Cheese
**CODE**
Sell by date going back to February 1, 2009
成功运行的PHP匹配代码,只有在该行被星号包围时才返回"true“,并将"-”的两边分别存储为$m1和$m2。
if ( preg_match('#^\*\*([^-]+)(?:-(.*))?\*\*$#', $line, $m) ) {
// only for **header - subheader** $m[2] is set.
if ( isset($m[2]) ) {
return array(TYPE_HEADER, array(trim($m[1]), trim($m[2])));
}
else {
return array(TYPE_KEY, array($m[1]));
}
}
因此,对于第1行:$m1 =“食品”和$m2 =“A类型”,将跳过第2行;第3行:$m1 =“产品”,等等。
的问题:如果标题没有星号,但仍然是全大写,并且至少有4个字符,那么如何重写上面的正则匹配?例如:
FOODS - TYPE A
___________________________________
PRODUCT
1) Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese;
2) La Fe String Cheese
CODE
Sell by date going back to February 1, 2009
谢谢。
发布于 2010-04-20 05:35:20
^([A-Z]{4,}(?:[A-Z ]*[A-Z])?)(?:\s*-\s*([A-Z]{4,}(?:[A-Z ]*)?))?$
这件怎么样?它将匹配至少4个字符的大写单词和至少4个大写字母的可选子标题。
发布于 2010-04-20 05:32:47
所以,您需要知道的是,标题以四个大写的ASCII字母开头?这应该是可行的:
'#^([A-Z]{4}[^-]*)(?:-(.*))?$#'
https://stackoverflow.com/questions/2675266
复制相似问题