// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r"^").unwrap();
let string = "class FinUrad
{
public string Kod { get; set; }
public string Nazev { get; set; }
public override string ToString()
{
return Nazev;
}
}
<Grid Margin=\"20\">
<Grid.RowDefinitions>
<RowDefinition Height=\"Auto\"/>
<RowDefinition Height=\"*\"/>
<RowDefinition Height=\"Auto\"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row=\"0\" Margin=\"0,0,0,10\">
<TextBlock Text=\"Jméno:\"/>
<TextBox x:Name=\"txtJmeno\" Margin=\"0,5,0,10\"/>
<TextBlock Text=\"Rodné číslo (XXXXXX/XXXX):\"/>
<TextBox x:Name=\"txtRC\" Margin=\"0,5,0,10\"/>
<TextBlock Text=\"Finanční úřad:\"/>
<ComboBox x:Name=\"comboFinUrady\" DisplayMemberPath=\"Nazev\" Margin=\"0,5,0,10\"/>
<TextBlock Text=\"Zpráva:\"/>
<TextBox x:Name=\"txtZprava\" AcceptsReturn=\"True\" Height=\"80\" Margin=\"0,5,0,10\"/>
</StackPanel>
<StackPanel Grid.Row=\"2\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">
<Button x:Name=\"btnZobrazitHistorii\" Content=\"Zobrazit historii\" Click=\"btnZobrazitHistorii_Click\"/>
<Button x:Name=\"btnOdeslat\" Content=\"Odeslat\" Click=\"btnOdeslat_Click\"/>
</StackPanel>
</Grid>
public partial class MainWindow : Window
{
private ObservableCollection<FinUrad> urady = new();
private const string ApiUrl = \"https://csharp.janjanousek.cz/api/financni-urady/\";
private const string ApiKey = \"VSB\";
public MainWindow()
{
InitializeComponent();
LoadFinUrady();
}
private async void LoadFinUrady()
{
while (true)
{
try
{
using HttpClient client = new();
client.DefaultRequestHeaders.Add(\"x-api-key\", ApiKey);
var response = await client.GetAsync(ApiUrl);
if (response.StatusCode == System.Net.HttpStatusCode.TooManyRequests)
{
if (response.Headers.TryGetValues(\"Retry-After\", out var values))
{
int secods = int.Parse(values.First());
await Task.Delay(secods * 1000);
continue;
}
}
response.EnsureSuccessStatusCode();
var xmlString = await response.Content.ReadAsStringAsync();
var xml = XDocument.Parse(xmlString);
var polozky = xml.Descendants(\"POLOZKA\");
foreach (var elem in polozky)
{
string id = elem.Element(\"CHODNOTA\")?.Value;
string name = elem.Element(\"ZKRTEXT\")?.Value;
if (!string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(name))
{
urady.Add(new FinUrad { Kod = id, Nazev = name });
}
}
comboFinUrady.ItemsSource = urady;
comboFinUrady.SelectedIndex = 0;
break;
}
catch (Exception ex)
{
MessageBox.Show(\"Chyba pri nacitani financnich uradu: \" + ex.Message);
break;
}
}
}
private void btnOdeslat_Click(object sender, RoutedEventArgs e)
{
string jmeno = txtJmeno.Text;
string rc = txtRC.Text;
var urad = comboFinUrady.SelectedItem as FinUrad;
string zprava = txtZprava.Text;
if(string.IsNullOrEmpty(jmeno) || string.IsNullOrEmpty(rc) || urad == null || string.IsNullOrEmpty(zprava) || zprava.Length < 10)
{
MessageBox.Show(\"Všechna pole musí být vyplněna a zpráva musí mít alespoň 10 znaků.\");
return;
}
if(!System.Text.RegularExpressions.Regex.IsMatch(rc, @\"^\\d{6}/\\d{4}$\"))
{
MessageBox.Show(\"Rodné číslo musí mít formát 123456/1234.\");
return;
}
SaveToDatabase(jmeno, rc, urad.Kod, urad.Nazev, zprava);
new ResultsWindow().Show();
}
private void btnZobrazitHistorii_Click(object sender, RoutedEventArgs e)
{
new ResultsWindow().Show();
}
private void SaveToDatabase(string jmeno, string rc, string idUrad, string nazevUrad, string zprava)
{
string dbPath = \"formulare.db\";
if(!File.Exists(dbPath))
{
using var connection = new SqliteConnection($\"Data Source={dbPath}\");
connection.Open();
var cmd = connection.CreateCommand();
cmd.CommandText = @\"
CREATE TABLE IF NOT EXISTS Formulare (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Jmeno TEXT NOT NULL,
RodneCislo TEXT NOT NULL,
IdUrad TEXT NOT NULL,
NazevUrad TEXT NOT NULL,
Zprava TEXT NOT NULL
)\";
cmd.ExecuteNonQuery();
}
using var conn = new SqliteConnection($\"Data Source={dbPath}\");
conn.Open();
var insert = conn.CreateCommand();
insert.CommandText = @\"
INSERT INTO Formulare (Jmeno, RodneCislo, IdUrad, NazevUrad, Zprava)
VALUES ($jmeno, $rc, $idUrad, $nazevUrad, $zprava)\";
insert.Parameters.AddWithValue(\"$jmeno\", jmeno);
insert.Parameters.AddWithValue(\"$rc\", rc);
insert.Parameters.AddWithValue(\"$idUrad\", idUrad);
insert.Parameters.AddWithValue(\"$nazevUrad\", nazevUrad);
insert.Parameters.AddWithValue(\"$zprava\", zprava);
insert.ExecuteNonQuery();
}
}
<Grid>
<ListBox x:Name=\"lstHistorie\"/>
</Grid>
public partial class ResultsWindow : Window
{
public ResultsWindow()
{
InitializeComponent();
LoadData();
}
private void LoadData()
{
string dbPath = \"formulare.db\";
if (!File.Exists(dbPath)) return;
using var conn = new SqliteConnection($\"Data Source={dbPath}\");
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = @\"
SELECT Jmeno, RodneCislo, IdUrad, NazevUrad, Zprava
FROM Formulare\";
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
lstHistorie.Items.Add($\"Jméno: {reader.GetString(0)}, RČ: {reader.GetString(1)}, Úřad: {reader.GetString(2)}, Zpráva: {reader.GetString(3)}\");
}
}
}";
// result will be a tuple containing the start and end indices for the first match in the string
let result = regex.captures(string);
let (start, end) = match result {
Some((s, e)) => (s, e),
None => {
// ...
}
};
println!("{}", &string[start, end]);
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Rust, please visit: https://docs.rs/regex/latest/regex/