簡體   English   中英

在PHP中替換字符串

[英]Replacing a string in PHP

我正在開發一個將文本作為輸入並提供序列圖作為輸出的應用程序,例如Web序列圖 因此,對於默認輸入,例如愛麗絲對鮑勃說“嗨”,輸入為:

Alice -> Bob: Hi

用戶可以提供任何種類的輸入。 上一行的變體:

Alice -> Bob : Hi
Alice -> Bob :Hi
Alice -> Bob: Hi
Alice -> Bob:Hi
Alice ->Bob : Hi
Alice ->Bob :Hi
Alice ->Bob: Hi
Alice ->Bob:Hi
Alice-> Bob : Hi
Alice-> Bob :Hi
Alice-> Bob: Hi
Alice-> Bob:Hi
Alice->Bob : Hi
Alice->Bob :Hi
Alice->Bob: Hi
Alice->Bob:Hi

消息的其他變體包括以下箭頭:

  • -
  • --
  • ->
  • -->
  • ->>
  • -->>

即使我想基於->:分割輸入,也很難,因為這些消息可以以任何順序出現。 所以,如果我給類似的東西:

Alice --> Bob: Hello
Bob -> Alice: See you!

起初,我限制用戶在箭頭周圍強制留出空間。 然后,計數為3,然后使用:拆分第三個數組項。 這是使用以下代碼實現的:

$userInput = array_map('trim', explode("\r\n", trim($input)));
foreach ($userInput as $line) {
    $line = array_filter(array_map('trim', explode(" ", str_replace(array(":", ": "), " ", $line), 4)));

我用空格替換: ,並將字符串分割成四個字符,並以空格作為分隔符。 我做對了嗎,如果給定的空格如上,並且當用戶指定了所有類型的箭頭時,此方法將無效。 請指導我。

嘗試使用正則表達式和preg_match( http://www.php.net/preg_match )。 這將使您的生活更加輕松。

正則表達式模式:

/(\w+)\s*\-+>{1,2}\s*(\w+)\s*:\s*(\w+)/i

分解:

(\w+)  <- Match and return 1 or more characters
\s*    <- Match 0 or more white space characters
(\-+>{1,2}) <- Match and return 1 or more "-" characters followed by 1 or 2 ">" characters

資源:

<?php
foreach ($userInput as $line) {
    $matches = array();
    preg_match('/(\w+)\s*(\-+>{1,2})\s*(\w+)\s*:\s*(\w+)/i', $line, $matches);
    echo $matches[1] . "\n"; // Alive
    echo $matches[2] . "\n"; // --> or -> or --->
    echo $matches[3] . "\n"; // Bob
    echo $matches[4] . "\n"; // Hi
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM