Page 1 of 1
Regular Expression problem.
Posted: Fri Oct 17, 2008 5:31 pm
by rose
Γνωρίζει κανένας Regular Expression που κάνει match μονο τον "κόσμο" της λέξης;
Για παράδειγμα να κάνει match το ROSE ή το rosE αλλα οχι το RoseASD, ΑSDROSE, ASDRoSEASD.
Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 6:25 pm
by ~~Wind~~
Code: Select all
public static boolean findRose(String word){
String rosepattern="^([r|R])([o|O])([s|S])([e|E])$";
if (word.matches(rosepattern))
return true;
return false;
}//findRose
μπακαλικο λιγακι αλλα τα εχω ξεχασει..,πρεπει να δουλευει
θα επανελθω ελπιζω

Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 8:37 pm
by Luke
Νομίζω πω έχει δίκιο ο ~~Wind~~, ρίξε μια ματιά κι
εδώ.
Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 9:37 pm
by rose
~~Wind~~ wrote:Code: Select all
public static boolean findRose(String word){
String rosepattern="^([r|R])([o|O])([s|S])([e|E])$";
if (word.matches(rosepattern))
return true;
return false;
}//findRose
μπακαλικο λιγακι αλλα τα εχω ξεχασει..,πρεπει να δουλευει
θα επανελθω ελπιζω

To Rose ηταν απλα παράδειγμα, θέλω λύση για οποιαδήποτε λέξη.....

Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 9:45 pm
by ~~Wind~~
Μα υποτιθεται οτι τα regex λειτουργουν συγκρινοντας μια συμβολοσειρα με ενα pattern
Δε μπορει το pattern να ειναι αοριστο... !?
Τι ακριβως θες να κανεις? Παιρνεις μια λεξη και μετα ?
Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 10:00 pm
by cyberpython
rose wrote:Γνωρίζει κανένας Regular Expression που κάνει match μονο τον "κόσμο" της λέξης;
Για παράδειγμα να κάνει match το ROSE ή το rosE αλλα οχι το RoseASD, ΑSDROSE, ASDRoSEASD.
Αν αυτό που θέλεις να κάνεις είναι να παίρνεις κείμενο π.χ. μία γραμμή και να βλέπεις αν υπάρχει matching string, μπορείς να περνάς τη γραμμή από ένα string tokenizer, μετά το αποτέλεσμα toLowercase() και σύγκριση με το string σου. Βέβαια, δεν είναι regex pattern, αλλά δε ξέρω τι ακριβώς θέλεις να κάνεις...
Re: Regular Expression problem.
Posted: Fri Oct 17, 2008 10:19 pm
by rose
~~Wind~~ wrote:Μα υποτιθεται οτι τα regex λειτουργουν συγκρινοντας μια συμβολοσειρα με ενα pattern
Δε μπορει το pattern να ειναι αοριστο... !?
Τι ακριβως θες να κανεις? Παιρνεις μια λεξη και μετα ?
Code: Select all
match(String txt,String mystring)
{
if mystring = PATTERN(txt);
return true;
}
To PATTERN?
cyberpython: Δεν μου κάνει, το component θέλει regular expressions
Re: Regular Expression problem.
Posted: Sat Oct 18, 2008 2:31 am
by ~~Wind~~
Αυτο που θες αν καταλαβα σωστα ειναι να δινεις μια λεξη κ ενα string και να ελεγχεις αν η λεξη ή οποιαδηποτε μορφη περιεχεται στο string.
Αυτο βασικα που χρειαζεται να κανεις ειναι να φτιαξεις ενα καταλληλο pattern απο τη λεξη που δινεις.
Το κλειδι βρισκεται στο οτι το pattern ειναι στη τελικη, ενα ακομα string...που απλα εχει μια λιγο ειδικη δομη και πρεπει να το φτιαξεις εσυ.
Code: Select all
package regexproj;
import java.util.StringTokenizer;
/**
* @author ~~Wind~~
*/
public class RegProj {
public static void main(String[] args) {
String word = "rose";
String txt = "roseabc RoSe abcrose rose abcroseabc";
if (matchRegStr(word,txt))
System.out.println(word.concat(" exists in ").concat(txt));
else System.out.println("FAIL!!");
}//main
//ψαχνει να βρει αν το word κ οποιαδηποτε μορφη αυτου βρισκεται στο txt
static boolean matchRegStr (String word, String txt) {
String pattern="";
StringTokenizer txtToken = new StringTokenizer(txt," ");
for (int i=0; i<word.length(); i++)
pattern += "([" + Character.toLowerCase(word.charAt(i)) + "]|[" + Character.toUpperCase(word.charAt(i)) + "])" ;
while (txtToken.hasMoreTokens())
if ((txtToken.nextToken()).matches(pattern))
return true;
return false;
}//matchRegStr
}//regexproj
τρεχει μια χαρα
μπορεις να παιξει με το txt για να δεις οτι βρισκει μονο τα RoSe κ rose κ οχι τα υπολοιπα
μπορεις ακομα να προσθεσεις ενα μετρητη και να δεις ποσες λεξεις βρισκεις απο το txt κλπ κλπ
- Spoiler: εμφάνιση/απόκρυψη
το δωρο σου ειναι αυτο :smt016
Re: Regular Expression problem.
Posted: Sat Oct 18, 2008 7:45 pm
by PaP
Re: Regular Expression problem.
Posted: Sun Oct 19, 2008 8:50 pm
by rose
~~Wind~~ wrote:Αυτο που θες αν καταλαβα σωστα ειναι να δινεις μια λεξη κ ενα string και να ελεγχεις αν η λεξη ή οποιαδηποτε μορφη περιεχεται στο string.
Περίπου, βασικά αν η λέξη περιέχει το string και μόνο.
Κάτι τέτοιο θα ήθελα "if WORD equalsIgnoreCase TXT return true;" αλλα με regular expressions. Οπότε αν η λέξη περιέχεται στο string, αλλα το String περιέχει και άλλες λέξεις, τοτε προφανώς WORD!=STRING
Wind ευχαριστώ για τον χρόνο σου!
Λύση, σε perl αλλα το pattern ειναι γενικό.
Code: Select all
$word ="rose";
$txt ="ROSE";
#
#if $word contains the $txt text and nothing but the $txt text (+ ignorecase), print Case Match!
if($word=~m/^$txt$/i)
{
print "Case Match!\n";
}
Συγνώμη που δεν έδωσα ακριβεις πληροφορίες!!!!!