Project

General

Profile

Download (21.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.strategy.parser;
11

    
12
import java.util.regex.Pattern;
13

    
14
import org.apache.log4j.Logger;
15

    
16
import eu.etaxonomy.cdm.common.UTF8;
17

    
18

    
19
/**
20
 * This class is a base class that separates regex parts of the parser from methods
21
 * @author a.mueller
22
 *
23
 */
24
public abstract class NonViralNameParserImplRegExBase  {
25
	@SuppressWarnings("unused")
26
	private static final Logger logger = Logger.getLogger(NonViralNameParserImplRegExBase.class);
27

    
28
	// good intro: http://java.sun.com/docs/books/tutorial/essential/regex/index.html
29

    
30
    //splitter
31
    protected static String epiSplitter = "(\\s+|\\(|\\))"; //( ' '+| '(' | ')' )
32
    protected static Pattern pattern = Pattern.compile(epiSplitter);
33

    
34
	public static final String hybridSign = UTF8.HYBRID.toString();  //  "\u00D7";
35

    
36
    //some useful non-terminals
37
    protected static String pStart = "^";
38
    protected static String end = "$";
39
    protected static String anyEnd = ".*" + end;
40
    protected static String oWs = "\\s+"; //obligatory whitespaces
41
    protected static String fWs = "\\s*"; //facultative whitespcace
42

    
43
    public static String capitalWord = "\\p{javaUpperCase}\\p{javaLowerCase}*";
44
    protected static String capital2LetterWord = "\\p{javaUpperCase}\\p{javaLowerCase}+";
45
    protected static String nonCapitalWord = "\\p{javaLowerCase}+";
46
    protected static String word = "(" + capitalWord + "|" + nonCapitalWord + ")"; //word (capital or non-capital) with no '.' at the end
47
    protected static String uppercaseWord = "\\p{javaUpperCase}{2,}";
48
    protected static String apostrophWord = word + "('\\p{javaLowerCase}*)?";
49

    
50
    protected static String capitalDotWord = capitalWord + "\\.?"; //capitalWord with facultativ '.' at the end
51
    protected static String capital2charDotWord = "(" + capital2LetterWord + "\\.?|\\p{javaUpperCase}\\.)"; //capitalWord with facultativ '.' but minimum 2 characters (single capital word like 'L' is not allowed
52
    protected static String twoCapitalDotWord = "\\p{javaUpperCase}{2}\\.";   //e.g. NY.
53

    
54
    protected static String nonCapitalDotWord = nonCapitalWord + "\\.?"; //nonCapitalWord with facultativ '.' at the end
55
    protected static String dotWord = "(" + capitalWord + "|" + nonCapitalWord + ")\\.?"; //word (capital or non-capital) with facultativ '.' at the end
56
    protected static String obligateDotWord = "(" + capitalWord + "|" + nonCapitalWord + ")\\.+"; //word (capital or non-capital) with obligate '.' at the end
57

    
58
    //Words used in an epethiton for a TaxonName
59
    protected static String nonCapitalEpiWord = "[a-z\u00EF\u00EB\u00F6\\-]+";   //a-z + diaeresis for ieo
60
    protected static String capitalEpiWord = "[A-Z]"+ nonCapitalEpiWord;
61

    
62

    
63
   //years
64
    protected static String month = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";
65
    protected static String singleYear = "\\b" + "(?:17|18|19|20)" + "\\d{2}" + "\\b";                      // word boundary followed by either 17,18,19, or 20 (not captured) followed by 2 digits
66
    protected static String correctYearPhrase = singleYear + "("+ fWs + "-" + fWs + singleYear + ")?" ;
67
    								//+ "(" + month + ")?)" ;                 // optional month
68
    //!! also used by TimePeriodParser
69
    public static String incorrectYearPhrase = "(\"" + correctYearPhrase + "\"|" + correctYearPhrase + "|"
70
            + UTF8.ENGLISH_QUOT_START + correctYearPhrase + UTF8.ENGLISH_QUOT_END + ")"
71
			+ fWs + "\\[" + singleYear + "\\]"  ;
72
    protected static String yearPhrase = "(" + correctYearPhrase + "|" + incorrectYearPhrase + ")";
73

    
74
    protected static String yearSeperator = "\\." + oWs;
75
    protected static String detailSeparator = ":" + oWs;
76
    protected static String referenceSeparator1 = "," + oWs ;
77
    protected static String inReferenceSeparator = oWs + "in" + oWs;
78
    protected static String referenceSeperator = "(" + referenceSeparator1 +"|" + inReferenceSeparator + ")" ;
79
    protected static String referenceAuthorSeparator = ","+ oWs;
80
    protected static String volumeSeparator = oWs ;
81
    protected static String referenceEnd = "\\.";
82

    
83

    
84
    //status
85
    protected static String status = "";
86

    
87
    //marker
88
    protected static String InfraGenusMarker = "(n|notho)?(subgen\\.|subg\\.|sect\\.|subsect\\.|ser\\.|subser\\.|t\\.infgen\\.|\\[unranked\\])";
89
    protected static String aggrOrGroupMarker = "(aggr\\.|agg\\.|group)";
90
    protected static String infraSpeciesMarker = "(n|notho)?(subsp\\.|convar\\.|var\\.|subvar\\.|f\\.|subf\\.|f\\.\\ssp\\.|f\\.spec\\.|f\\.sp\\.|\\[unranked\\]|tax\\." + fWs + "infrasp\\.)";
91
    protected static String oldInfraSpeciesMarker = "(prol\\.|proles|race|taxon|sublusus)";
92

    
93

    
94
    //AuthorString
95
    protected static String qm = "[" + UTF8.RIGHT_SINGLE_QUOT + "']";
96
    protected static String authorPart = "(" + "([OdDL]"+qm+"|[’']t|ten\\s||le\\s|zur\\s)?" + "(" + capital2charDotWord + "|DC.)" + "('" + nonCapitalDotWord + ")?" + "|[vV][ao]n(\\sder)?|da|du|de(n|l|\\sla)?)" ;
97
    protected static String author = "(" + authorPart + "(" + fWs + "|-)" + ")+" + "(f\\.|fil\\.|secundus)?" ;
98
    protected static String finalTeamSplitter = "(" + fWs + "(&)" + fWs + "|" + oWs + "et" + oWs + ")";
99
    protected static String notFinalTeamSplitter = "(?:" + fWs + "," + fWs + "|" + finalTeamSplitter + ")";
100
    protected static String authorTeam = fWs + "((?>" + author + notFinalTeamSplitter + ")*" + author + finalTeamSplitter + ")?(?:"  + author + "|al\\.)" +  fWs;
101
    protected static String exString = "(ex\\.?)";
102
    protected static String authorAndExTeam = "(" + authorTeam + oWs + exString + oWs + ")?" + authorTeam;
103
    protected static String basStart = "\\(";
104
    protected static String basEnd = "\\)";
105
    protected static String botanicBasionymAuthor = basStart + "(" + authorAndExTeam + ")" + basEnd;  // '(' and ')' is for evaluation with RE.paren(x)
106
    protected static String fullBotanicAuthorString = fWs + "((" + botanicBasionymAuthor +")?" + fWs + authorAndExTeam + "|" + botanicBasionymAuthor +")"+ fWs;
107
    protected static String facultFullBotanicAuthorString = "(" +  fullBotanicAuthorString + ")?" ;
108

    
109
    //Zoo. Author
110
    //TODO does zoo author have ex-Author?
111
    protected static String zooAuthorYearSeperator = "(,|\\s)";
112
    protected static String zooAuthorAddidtion = fWs + zooAuthorYearSeperator + fWs + singleYear;
113
    protected static String zooAuthorTeam = authorTeam + zooAuthorAddidtion;
114
    protected static String zooBasionymAuthor = basStart + "(" + zooAuthorTeam + ")" + basEnd;
115
    protected static String fullZooAuthorString = fWs + "((" + zooBasionymAuthor +")?" + fWs + zooAuthorTeam + "|" + zooBasionymAuthor +")"+ fWs;
116
    protected static String facultFullZooAuthorString = "(" +  fullZooAuthorString + ")?" ;
117

    
118
    protected static String facultFullAuthorString2 = "(" + facultFullBotanicAuthorString + "|" + facultFullZooAuthorString + ")";
119

    
120
    protected static String basionymAuthor = "(" + botanicBasionymAuthor + "|" + zooBasionymAuthor+ ")";
121
    protected static String fullAuthorString = "(" + fullBotanicAuthorString + "|" + fullZooAuthorString+ ")";
122

    
123
    //details
124
    //TODO still not all parsed
125

    
126
    protected static String nr2 = "\\d{1,2}";
127
    protected static String nr4 = "\\d{1,4}";
128
    protected static String nr5 = "\\d{1,5}";
129

    
130

    
131
    protected static String pPage = nr5 + "[a-zA-Z]?";
132
    protected static String pStrNo = "n\u00B0" + fWs + "(" + nr4 + ")";
133

    
134
    protected static String pBracketNr = "\\[" + nr4 + "\\]";
135
    protected static String pFolBracket = "\\[fol\\." + fWs + "\\d{1,2}(-\\d{1,2})?\\]";  //maybe merge with pTabFigPlate (see below)
136

    
137

    
138
    protected static String pRangeSep = "[-\u2013]";
139
    protected static String pRangeSepCo = "[-\u2013,]";
140

    
141
    protected static String pTabFigPlateStart = "([tT](abs?)?|[fF](igs?)?|[pP]l?s?)(\\.|\\s|$)";   //$ for only 'f'
142
    protected static String pAbcNr = "[a-zA-Z\u00DF]";
143
    protected static String pTabFigPlateNumber = "(" + nr4 + "|" + pAbcNr + "|" + nr4 + fWs + pAbcNr + ")" + "("+ pRangeSepCo + fWs + pAbcNr + ")?";
144
    protected static String pTabFigPlateNumbers = "(" + pTabFigPlateNumber + "(" + pRangeSepCo + fWs + pTabFigPlateNumber + ")?)";
145

    
146
    protected static String pTabFigPlate = pTabFigPlateStart + fWs + pTabFigPlateNumbers + "?";
147
    protected static String pTabFigPl = pTabFigPlate;
148

    
149
    //e.g.: p455; p.455; pp455-456; pp.455-456; pp.455,456; 455, 456; pages 456-457; pages 456,567
150
    protected static String pSinglePages = "(p\\.?)?" + fWs + pPage + "(," + pTabFigPl +"){0,2}";
151
    protected static String pMultiPages = "(pp\\.?|pages)?" + fWs + pPage + fWs + pRangeSepCo +fWs + pPage ;
152
    //static String pPages = pPage + "(," + fWs + "(" + pPage + "|" + pTabFig + ")" + ")?";
153
    protected static String pPages = "(" + pSinglePages +"|" + pMultiPages +")";
154
    protected static String pPagesTabFig = pPages +"([,\\.]" + fWs + pTabFigPl + "){1,2}";
155

    
156

    
157

    
158
    protected static String pCouv = "couv\\." + fWs + "\\d{1,3}";
159

    
160
    protected static String pTabSpecial = "tab\\." + fWs + "(ad" + fWs + "\\d{1,3}|alphab)";
161
    protected static String pPageSpecial = nr4 + fWs + "(in obs|, Expl\\. Tab)";
162
    protected static String pSpecialGardDict = capitalWord + oWs + "n\u00B0" + oWs + "\\d{1,2}";
163
    //TODO
164
    // protected static String pSpecialDetail = "(in err|in tab|sine pag|add\\. & emend|Emend|""\\d{3}"" \\[\\d{3}\\])";
165
 // protected static String pSpecialDetail = "(in err|in tab|sine pag|add\\. & emend|Emend|""\\d{3}"" \\[\\d{3}\\])";
166
    protected static String pSpecialDetail = "(in err|in tab|sine pag|add\\.)";
167

    
168

    
169
//    Const romI = "[Ii]{0,3}"
170
//    	Const romX = "[Xx]{0,3}"
171
//    	Const romC = "[Cc]{0,3}"
172
//    	Const romM = "[Mm]{0,3}"
173
//    ' roman numbers
174
//    ' !! includes empty string: ""
175
//    romOne = "([Vv]?" & romI & or_ & "(IV|iv)" & or_ & "(IX|ix)" & ")"
176
//    romTen = "([Ll]?" & romX & or_ & "(XL|xl)" & or_ & "(XC|xc)" & ")"
177
//    romHun = "([Dd]?" & romC & or_ & "(CD|cd)" & or_ & "(CM|cm)" & ")"
178
//    romNr = "(?=[MDCLXVImdclxvi])(((" & romM & ")?" & romHun & ")?" & romTen & ")?" & romOne
179
    protected static String pRomNr = "ljfweffaflas"; //TODO rom number have to be tested first
180

    
181
//    "(,\\s*" + pTabFigPl + ")?" +
182
    protected static String pDetailAlternatives = "(" + pPages + "|" + pPageSpecial + "|" + pStrNo + "|" + pBracketNr +
183
    			"|" + pTabFigPl + "(,\\s*" + pTabFigPl + ")?" + "|" + pTabSpecial + "|" + pFolBracket + "|" + pCouv + "|" + pRomNr + "|" +
184
    			pSpecialGardDict + "|" + pSpecialDetail + "|" + pPagesTabFig + ")";
185

    
186
    protected static String detail = pDetailAlternatives;
187

    
188
    //reference
189
    protected static String volume = nr4 + "[a-z]?" + fWs + "(\\("+ nr4  + "([-\u2013]" + nr4 + ")?\\))?" + "(\\((Suppl|Beibl|App|Beil|Misc)\\.\\))?";
190
    //this line caused problem https://dev.e-taxonomy.eu/trac/ticket/1556 in its original form: "([\u005E:\\.]" + fWs + ")";
191
    protected static String anySepChar = "([\u005E:a-zA-Z]" + fWs + ")"; //all characters except for the detail separator, a stricter version would be [,\\-\\&] and some other characters
192
//  protected static String anySepChar = "([,\\-\\&\\.\\+\\']" + fWs + ")";
193

    
194
    protected static int authorSeparatorMaxPosition = 4;  //Author may have a maximum of 4 words
195
    protected static String pTitleWordSeparator = "(\\."+ fWs+"|" + oWs + "|\\.?[-\u2013])";
196
    protected static String pSeriesPart = ",?" + fWs + "[sS]er(\\.)?" + oWs + "\\d{1,2},?";
197

    
198
    protected static String referenceTitleFirstPart = "(" + apostrophWord + pTitleWordSeparator + "|" + twoCapitalDotWord + fWs + ")";
199
    protected static String referenceTitle = referenceTitleFirstPart + "*" + "("+ dotWord + "|" + uppercaseWord + "|" + pSeriesPart + ")";  //reference title may have words seperated by whitespace or dot. The last word may not have a whitespace at the end. There must be at least one word
200
    protected static String referenceTitleWithSepCharacters = "(((" + referenceTitle +"|\\(.+\\))"  + anySepChar + ")*" + referenceTitle + ")"; //,?
201
    //TODO test performance ??
202
    protected static String referenceTitleWithSepCharactersAndBrackets = referenceTitleWithSepCharacters + fWs + "(\\(" + referenceTitleWithSepCharacters + "\\)"+fWs+ ")?(" + referenceTitleWithSepCharacters +")?"  ;
203

    
204
    protected static String referenceTitleWithoutAuthor = "(" + referenceTitleFirstPart + ")" + "{"+ (authorSeparatorMaxPosition -1) +",}" + dotWord +
205
    			anySepChar + referenceTitleWithSepCharactersAndBrackets ;   //separators exist and first separator appears at position authorSeparatorMaxPosition or later
206
    protected static String referenceTitleWithPlaceBracket = referenceTitle + "(" + oWs + "\\(" + capitalWord + "(" + oWs + capitalWord + ")?" + "\\))?" ;
207

    
208
    protected static String editionSeparator = "(" + oWs + "|," + fWs + ")ed\\.?" + oWs;  //
209
    protected static String pEdition = nr2;
210

    
211
    protected static String pVolPart = volumeSeparator +  volume;
212
    protected static String pEditionPart = editionSeparator +  pEdition;
213
    protected static String pEditionVolPart = editionSeparator +  pEdition + fWs + "," + volumeSeparator +  volume;
214
    protected static String pEditionVolAlternative = "(" + pEditionPart + "|" + pVolPart + "|" + pEditionVolPart + ")?";
215

    
216
//    protected static String pVolRefTitle = referenceTitle + "(" + pVolPart + ")?";
217
    protected static String pVolRefTitle = referenceTitleWithPlaceBracket + "(" + pVolPart + ")?";
218
    protected static String softEditionVolRefTitle = referenceTitleWithSepCharactersAndBrackets + pEditionVolAlternative;
219
    protected static String softVolNoAuthorRefTitle = referenceTitleWithoutAuthor + "(" + volumeSeparator +  volume + ")?";
220

    
221
    protected static String pBookReference = softEditionVolRefTitle;
222
    protected static String pBookSectionReference = authorTeam + referenceAuthorSeparator + softEditionVolRefTitle;
223
    protected static String pArticleReference = pVolRefTitle;
224
    protected static String pSoftArticleReference = softVolNoAuthorRefTitle;
225

    
226
    protected static String pReferenceSineDetail = "(" + pArticleReference + "|" + pBookSectionReference + "|" + pBookReference + ")";
227

    
228
    protected static String pReference = pReferenceSineDetail + detailSeparator + detail +
229
					yearSeperator + yearPhrase + "(" + referenceEnd + ")?";
230

    
231
    //static String strictBook = referenc
232

    
233
    protected static Pattern referencePattern = Pattern.compile(pReference);
234
    protected static Pattern referenceSineDetailPattern = Pattern.compile(pReferenceSineDetail);
235

    
236
    protected static String pNomStatusNom =
237
            "nom\\." + fWs + "(ambig\\.|dub\\.|confus\\.|superfl\\.|nud\\.|illeg\\.|inval\\.|cons\\.(\\s*(prop|des)\\.)?|altern(ativ)?\\.|subnud\\.|nov\\.|legit\\.|sanct\\.|valid|"+
238
    			"rej\\.("+ fWs + "prop\\.)?|provis\\.|utique"+fWs+"rej\\.("+fWs+"prop\\.)?|orth\\."+fWs+"cons\\.("+fWs+"prop\\.)?)";
239
    protected static String pNomStatusOrthVar = "orth\\." + fWs + "(var\\.|rej\\.)";
240
    protected static String pNomStatusComb = "comb\\." + fWs + "(inval\\.|illeg\\.|nov\\.)";
241
    protected static String pNomStatusOpus = "opus\\." + fWs + "utique" + fWs + "oppr\\.";
242
    protected static String pNomStatusIned = "ined\\.";
243

    
244

    
245
    protected static String pNomStatus = "(" + pNomStatusNom + "|" + pNomStatusOrthVar + "|" +pNomStatusComb + "|" + pNomStatusOpus + "|" + pNomStatusIned + ")";
246
    protected static String pNomStatusPhrase1 = "," + fWs + pNomStatus;
247
    protected static String pNomStatusPhrase2 = "\\[" + fWs + pNomStatus + "\\]";
248

    
249
    protected static String pNomStatusPhrase = "(?:" + pNomStatusPhrase1 + "|" + pNomStatusPhrase2 + ")";
250

    
251
// Soraya
252
//opus utique oppr.
253
//pro syn.
254
//provisional synonym
255
//fossil name
256

    
257

    
258
    //cultivars and hybrids
259
    protected static String cultivar = oWs + "'..+'"; //Achtung mit Hochkomma in AuthorNamen
260
    protected static String cultivarMarker = oWs + "(cv\\.|')";
261
    protected static String notho = "notho";
262
    protected static String hybridPart = "([xX]" + oWs + "|"+hybridSign+"|"+notho+")";
263
    protected static String noNothoHybridPart = "([xX]" + oWs + "|"+hybridSign+")";
264
    protected static String hybridFull = "(" +oWs +"|"+ pStart +")" + noNothoHybridPart;  //for some reason infraspecific notho ranks do not parse if notho is allowed as uninomial prefix.
265
    protected static String hybridFormularSeparator = oWs + "[" + hybridSign + "xX]" + oWs;
266

    
267

    
268
    //  Name String
269
    protected static String genusOrSupraGenus = "("+hybridFull+")?" + capitalEpiWord;
270
    protected static String infraGenus = capitalEpiWord + oWs + InfraGenusMarker + oWs + capitalEpiWord;
271
    protected static String aggrOrGroup = capitalEpiWord + oWs + nonCapitalEpiWord + oWs + aggrOrGroupMarker;
272
    protected static String species = genusOrSupraGenus + oWs + "("+hybridPart+")?" + nonCapitalEpiWord;
273
    protected static String speciesWithInfraGen = genusOrSupraGenus + oWs + "\\(" + capitalEpiWord + "\\)" + oWs + nonCapitalEpiWord;
274

    
275
    protected static String infraSpecies = species + oWs + infraSpeciesMarker + oWs + "("+hybridPart+")?" + nonCapitalEpiWord;
276
    protected static String zooInfraSpecies = species + oWs + "(" + infraSpeciesMarker + oWs +")?" + "("+hybridPart+")?" + nonCapitalEpiWord;
277
    protected static String oldInfraSpecies = capitalEpiWord + oWs +  nonCapitalEpiWord + oWs + oldInfraSpeciesMarker + oWs + nonCapitalEpiWord;
278
    protected static String autonym = capitalEpiWord + oWs + "(" + nonCapitalEpiWord +")" + oWs + fullBotanicAuthorString +  oWs + infraSpeciesMarker + oWs + "\\1";  //2-nd word and last word are the same
279
    //autonym pattern used within anyBotanicalFullName pattern
280
    protected static String autonym2 = capitalEpiWord + oWs + "(" + nonCapitalEpiWord +")" + oWs + fullBotanicAuthorString +  oWs + infraSpeciesMarker + oWs + "\\2";  //2-nd word and last word are the same
281

    
282

    
283
    protected static String anyBotanicName = "(" + genusOrSupraGenus + "|" + infraGenus + "|" + aggrOrGroup + "|" + species + "|" +
284
                    speciesWithInfraGen + "|" + infraSpecies + "|" + oldInfraSpecies + "|" + autonym   + ")+";
285
    protected static String anyZooName = "(" + genusOrSupraGenus + "|" + infraGenus + "|" + aggrOrGroup + "|" + species + "|" +
286
                    speciesWithInfraGen + "|" +zooInfraSpecies + "|" +  oldInfraSpecies + ")+";
287
    protected static String anyBotanicFullName = "(" + autonym2 + "|" + anyBotanicName + oWs + fullBotanicAuthorString + ")"  ;
288
    protected static String anyZooFullName = anyZooName + oWs + fullZooAuthorString ;
289
    protected static String anyFullName = "(" + anyBotanicFullName + "|" + anyZooFullName + ")";
290
    protected static String hybridFullName = "(" + anyFullName  + "|" +  anyBotanicName + "|" + anyZooName + ")" + hybridFormularSeparator + "(" + anyFullName  + "|" +  anyBotanicName + "|" + anyZooName + ")";
291

    
292
    //Pattern
293
    protected static Pattern oWsPattern = Pattern.compile(oWs);
294
    protected static Pattern finalTeamSplitterPattern = Pattern.compile(finalTeamSplitter);
295
    protected static Pattern cultivarPattern = Pattern.compile(cultivar);
296
    protected static Pattern cultivarMarkerPattern = Pattern.compile(cultivarMarker);
297

    
298
    protected static Pattern genusOrSupraGenusPattern = Pattern.compile(pStart + genusOrSupraGenus + facultFullAuthorString2 + end);
299
    protected static Pattern infraGenusPattern = Pattern.compile(pStart + infraGenus + facultFullAuthorString2 + end);
300
    protected static Pattern aggrOrGroupPattern = Pattern.compile(pStart + aggrOrGroup + fWs + end); //aggr. or group has no author string
301
    protected static Pattern speciesPattern = Pattern.compile(pStart + species + facultFullAuthorString2 + end);
302
    protected static Pattern speciesWithInfraGenPattern = Pattern.compile(pStart + speciesWithInfraGen + facultFullAuthorString2 + end);
303
    protected static Pattern infraSpeciesPattern = Pattern.compile(pStart + infraSpecies + facultFullAuthorString2 + end);
304
    protected static Pattern zooInfraSpeciesPattern = Pattern.compile(pStart + zooInfraSpecies + facultFullAuthorString2 + end);
305
    protected static Pattern oldInfraSpeciesPattern = Pattern.compile(pStart + oldInfraSpecies + facultFullAuthorString2 + end);
306
    protected static Pattern autonymPattern = Pattern.compile(pStart + autonym + fWs + end);
307
    protected static Pattern hybridFormulaPattern = Pattern.compile(pStart + hybridFullName + fWs + end);
308

    
309

    
310
    protected static Pattern botanicBasionymPattern = Pattern.compile(botanicBasionymAuthor);
311
    protected static Pattern zooBasionymPattern = Pattern.compile(zooBasionymAuthor);
312
    protected static Pattern basionymPattern = Pattern.compile(basionymAuthor);
313

    
314
    protected static Pattern zooAuthorPattern = Pattern.compile(zooAuthorTeam);
315
    protected static Pattern zooAuthorAddidtionPattern = Pattern.compile(zooAuthorAddidtion);
316

    
317
    protected static Pattern exAuthorPattern = Pattern.compile(oWs + exString);
318

    
319
    protected static Pattern fullBotanicAuthorStringPattern = Pattern.compile(fullBotanicAuthorString);
320
    protected static Pattern fullZooAuthorStringPattern = Pattern.compile(fullZooAuthorString);
321
    protected static Pattern fullAuthorStringPattern = Pattern.compile(fullAuthorString);
322

    
323
    protected static Pattern anyBotanicFullNamePattern = Pattern.compile(anyBotanicFullName);
324
    protected static Pattern anyZooFullNamePattern = Pattern.compile(anyZooFullName);
325

    
326

    
327
}
(4-4/8)