Вы также можете использовать метод compareTo()
для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.
==
сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern()
, вы можете использовать оператор ==
для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.
Regular expressions first came around in mathematics and automata theory. A regular expression is simply something which defines a regular language. Without going too much into what "regular" means, think of a language as this way:
So you could have a string (which is, remember, just a concatenation of symbols) which is not part of a given language. Or it could be in the language.
So lets say you have an alphabet made of 2 symbols: "0" and "1". And lets say you want to create a language using the symbols in that alphabet. You could create the following rule: "In order for a string to be in my language, it must have only 0's and 1's in it."
So these strings are in your language:
These would not be in your language:
That's a pretty simple language. How about this: "In my language, each string [analogous to a valid 'word' in English] must being with a 0, and then can be followed by any number of 0's or 1's"
These are in the language:
These are not:
Well rather than defining the language using words - and these languages might get very complex ("1 followed by 2 0's followed by any combination of 1's and 0's ending with a 1"), we came up with this syntax called "regular expressions" to define the language.
The first language would have been:
(0|1)*
(0 or 1, repeated infinitely)
The next: 0(0|1)*
(0, followed by any number of 0's and 1's).
So lets think of programming now. When you create a regex, you are saying "Look at this text. Return to me strings which match this pattern." Which is really saying "I have defined a language. Return to me all strings within this document which are in my language."
So when you create a "regex", you are actually defining a regular language, which is a mathematical concept. (In actuality, perl-like regex define "nonregular" languages, but that is a separate issue.)
By learning the syntax of regex, you are learning the ins and outs of how to create a language, so that later you can see if a given string is "in" the language. Thus, commonly, people say that regex are for pattern matching - which is basically what you are doing when you look at a pattern, and see if it "matches" the rules for your language.
(this was long. does it answer your question at all?)
Регулярное выражение - это специализированный язык для сопоставления с образцом. Они используются во многих текстовых редакторах и языках программирования для сопоставления строк.
Вы также можете делать гораздо более сложные вещи с помощью регулярных выражений. На эту тему есть отличная книга О'Рейли и множество примеров в сети.
То, что вы не можете сделать с регулярными выражениями, - это правильный синтаксический анализ, потому что регулярные выражения не являются достаточным языком для кодирования грамматики. Они специализируются на сопоставлении с образцом, и если вы попытаетесь использовать их для синтаксического анализа чего-то вроде XML, у вас, скорее всего, возникнут проблемы в будущем. В частности, вы не можете анализировать произвольно вложенные рекурсивные структуры с помощью регулярных выражений. Простой пример проблемы, которую регулярное выражение может ' t resolve well - это набор вложенных фигурных скобок, как в C:
int main() {
void func() {
}
}
Вы можете заставить регулярные выражения решать эту задачу до определенного момента, но требования к памяти для этого неограниченно возрастают по мере роста количества фигурных скобок. Если вас интересуют более подробные сведения, прочтите этот другой вопрос StackOverflow о том, почему такую конструкцию трудно анализировать с помощью регулярных выражений:
Можно ли использовать регулярные выражения для сопоставления вложенных шаблонов?
В разных языках регулярные выражения реализуются по-разному. способов, но реализация Perl очень популярна. Семейство регулярных выражений, совместимых с Perl, называется PCRE, или P erl- C ompatible R egular E xpressions. Вот пример регулярного выражения на Perl, которое может соответствовать целым числам:
#!/usr/bin/perl
use strict;
use warnings;
match_string( "one-two" );
match_string( "1-2" );
sub match_string {
my $string = shift;
if ( $string =~ /(\d+)/ ) {
print "$string matches!\n";
print "matched: ", $1, "\n";
} else {
print "$string doesn't match!\n";
}
}
$ perl test.pl
one-two doesn't match!
1-2 matches!
matched: 1
В этом примере регулярное выражение соответствует одному или нескольким примерам цифры. Вот строка:
if ( $string =~ /(\d+)/ ) {
Это можно прочитать так:
В некоторых языках (например, Perl) вы также можете использовать регулярные выражения для выполнения подстановок, например:
substitute_string( "one-two" );
substitute_string( "1-2" );
sub substitute_string {
my $string = shift;
print "before: ", $string, "\n";
$string =~ s/1/one/g;
$string =~ s/2/two/g;
print "after: ", $string, "\n";
}
$ perl test.pl
before: one-two
after: one-two
before: 1-2
after: one-two
Надеюсь, этого достаточно, чтобы вы начали!
строка сопоставляется с регулярным выражением между /.В некоторых языках (например, Perl) вы также можете использовать регулярные выражения для выполнения подстановок, например:
substitute_string( "one-two" );
substitute_string( "1-2" );
sub substitute_string {
my $string = shift;
print "before: ", $string, "\n";
$string =~ s/1/one/g;
$string =~ s/2/two/g;
print "after: ", $string, "\n";
}
$ perl test.pl
before: one-two
after: one-two
before: 1-2
after: one-two
Надеюсь, этого достаточно, чтобы вы начали!
строка сопоставляется с регулярным выражением между /.В некоторых языках (например, Perl) вы также можете использовать регулярные выражения для выполнения подстановок, например:
substitute_string( "one-two" );
substitute_string( "1-2" );
sub substitute_string {
my $string = shift;
print "before: ", $string, "\n";
$string =~ s/1/one/g;
$string =~ s/2/two/g;
print "after: ", $string, "\n";
}
$ perl test.pl
before: one-two
after: one-two
before: 1-2
after: one-two
Надеюсь, этого достаточно, чтобы вы начали!
Другие люди рассказали, что такое регулярное выражение и для чего его можно использовать, поэтому я не буду перефразировать предыдущие ответы. Однако, если вам интересно узнать о синтаксисе регулярных выражений (например, о том, как построить регулярное выражение), посмотрите раздел Tutorial на сайте regular-expression.info; это, вероятно, самый подробный ресурс синтаксиса регулярных выражений в Интернете.